Jogo Quiz perguntas aleatórias
2 participantes
Página 1 de 1
Jogo Quiz perguntas aleatórias
Estou tentando fazer com quer as perguntas sejam aleatórias mas que não repitam e que a pessoa tenha que responder 20 perguntas para vencer
Script que estou usando:
Script que estou usando:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class responder : MonoBehaviour
{
public Text pergunta;
public Text respostaA;
public Text respostaB;
public Text respostaC;
public Text respostaD;
public string[] perguntas;
public string[] alternativaA;
public string[] alternativaB;
public string[] alternativaC;
public string[] alternativaD;
public string[] corretas;
private int idPergunta;
private float questoes;
private float media;
// Start is called before the first frame update
void Start() {
idPergunta = 0;
questoes = perguntas.Length;
pergunta.text = perguntas[idPergunta];
respostaA.text = alternativaA[idPergunta];
respostaB.text = alternativaB[idPergunta];
respostaC.text = alternativaC[idPergunta];
respostaD.text = alternativaD[idPergunta];
}
public void resposta(string alternativa)
{
if (alternativa == "A")
{
if (alternativaA[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "B")
{
if (alternativaB[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "C")
{
if (alternativaC[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "D")
{
if (alternativaD[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
proximaPergunta();
}
void carregaCena(string nomeCena)
{
SceneManager.LoadScene(nomeCena);
}
void proximaPergunta()
{
idPergunta += 1;
if (idPergunta <= (questoes - 1))
{
pergunta.text = perguntas[idPergunta];
respostaA.text = alternativaA[idPergunta];
respostaB.text = alternativaB[idPergunta];
respostaC.text = alternativaC[idPergunta];
respostaD.text = alternativaD[idPergunta];
}
else
{
SceneManager.LoadScene("win");
}
}
// Update is called once per frame
void Update()
{
}
}
paulo1001- Iniciante
- PONTOS : 1958
REPUTAÇÃO : 0
Respeito as regras :
Re: Jogo Quiz perguntas aleatórias
Existem várias formas, mas eu faria o seguinte: criaria uma Lista do tipo int que armazena os ids de perguntas já sorteadas para evitar repetições:
Criaria um método para sortear um id de pergunta:
Chamo o método acima no Start, e no método proximaPeegunta eu tiro a parte de adicionar mais um ao Id.
- Código:
List<int> perguntasRepetidas = new List<int>();
Criaria um método para sortear um id de pergunta:
- Código:
void SortearPergunta(){
var encontrouId = false;
while(!encontrouId){
idPergunta = Random.Range(0, perguntas.Length);
encontrouId = !perguntasRepetidas.Contains(idPergunta);
if(encontrouId)
perguntasRepetidas.Add(idPergunta);
}
proximaPergunta();
}
Chamo o método acima no Start, e no método proximaPeegunta eu tiro a parte de adicionar mais um ao Id.
Re: Jogo Quiz perguntas aleatórias
mas o que eu coloco no método próxima pergunta invés de adicionar mais um ao id.MayLeone escreveu:Existem várias formas, mas eu faria o seguinte: criaria uma Lista do tipo int que armazena os ids de perguntas já sorteadas para evitar repetições:
- Código:
List<int> perguntasRepetidas = new List<int>();
Criaria um método para sortear um id de pergunta:
- Código:
void SortearPergunta(){
var encontrouId = false;
while(!encontrouId){
idPergunta = Random.Range(0, perguntas.Length);
encontrouId = !perguntasRepetidas.Contains(idPergunta);
if(encontrouId)
perguntasRepetidas.Add(idPergunta);
}
proximaPergunta();
}
Chamo o método acima no Start, e no método proximaPeegunta eu tiro a parte de adicionar mais um ao Id.
paulo1001- Iniciante
- PONTOS : 1958
REPUTAÇÃO : 0
Respeito as regras :
Re: Jogo Quiz perguntas aleatórias
Não conseguir, eu não entendo muito sobre programação.
paulo1001- Iniciante
- PONTOS : 1958
REPUTAÇÃO : 0
Respeito as regras :
Re: Jogo Quiz perguntas aleatórias
fiz desse jeito
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class responder : MonoBehaviour
{
public Text pergunta;
public Text respostaA;
public Text respostaB;
public Text respostaC;
public Text respostaD;
public string[] perguntas;
public string[] alternativaA;
public string[] alternativaB;
public string[] alternativaC;
public string[] alternativaD;
public string[] corretas;
List<int> perguntasRepetidas = new List<int>();
private int idPergunta;
private float questoes;
private float media;
// Start is called before the first frame update
void Start()
{
var encontrouId = false;
while (!encontrouId)
{
idPergunta = Random.Range(0, perguntas.Length);
encontrouId = !perguntasRepetidas.Contains(idPergunta);
if (encontrouId)
perguntasRepetidas.Add(idPergunta);
}
questoes = perguntas.Length;
pergunta.text = perguntas[idPergunta];
respostaA.text = alternativaA[idPergunta];
respostaB.text = alternativaB[idPergunta];
respostaC.text = alternativaC[idPergunta];
respostaD.text = alternativaD[idPergunta];
}
public void resposta(string alternativa)
{
if (alternativa == "A")
{
if (alternativaA[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "B")
{
if (alternativaB[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "C")
{
if (alternativaC[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
else if (alternativa == "D")
{
if (alternativaD[idPergunta] != corretas[idPergunta])
{
SceneManager.LoadScene("gameover");
}
}
proximaPergunta();
}
void carregaCena(string nomeCena)
{
SceneManager.LoadScene(nomeCena);
}
void proximaPergunta()
{
var encontrouId = false;
while (!encontrouId)
{
idPergunta = Random.Range(0, perguntas.Length);
encontrouId = !perguntasRepetidas.Contains(idPergunta);
if (encontrouId)
perguntasRepetidas.Add(idPergunta);
}
if (idPergunta <= (questoes - 1))
{
pergunta.text = perguntas[idPergunta];
respostaA.text = alternativaA[idPergunta];
respostaB.text = alternativaB[idPergunta];
respostaC.text = alternativaC[idPergunta];
respostaD.text = alternativaD[idPergunta];
}
else
{
SceneManager.LoadScene("win");
}
}
// Update is called once per frame
void Update()
{
}
}
paulo1001- Iniciante
- PONTOS : 1958
REPUTAÇÃO : 0
Respeito as regras :
Re: Jogo Quiz perguntas aleatórias
Eu mudaria a estrutura de perguntas e respostas porque do jeito que está, pode confundir no índice dos Arrays em relação às perguntas e suas respectivas alternativas.
O jeito mais limpo de fazer um sistema de quiz com alternativas pré-definidas é usar um banco de dados (ou arquivos JSON) para guardar as perguntas e respostas, ou até mesmo o recurso da Unity de ScriptableObjects.
Mas para não complicar tanto, vamos abordar outra alternativa que é criar uma classe para as Perguntas e instanciar dentro de uma lista os objetos que terão as alternativas, a alternativa certa e a pergunta, assim:
Agora para criar as perguntas basta instanciar ela assim, por exemplo:
Então no script do quiz você pode criar uma lista com todos os objetos das perguntas:
Espero que tenha entendido, e com essa ideia inicial vc possa expandir para criar o sistema de acertos e erros.
O jeito mais limpo de fazer um sistema de quiz com alternativas pré-definidas é usar um banco de dados (ou arquivos JSON) para guardar as perguntas e respostas, ou até mesmo o recurso da Unity de ScriptableObjects.
Mas para não complicar tanto, vamos abordar outra alternativa que é criar uma classe para as Perguntas e instanciar dentro de uma lista os objetos que terão as alternativas, a alternativa certa e a pergunta, assim:
- Código:
using System.Collections;
class Pergunta{
public readonly string textoPergunta;
public readonly string[] alternativas = new string[4];
public readonly string respostaCerta;
public Pergunta(string questao, string alternativaA, string alternativaB,
string alternativaC, string alternativaD, respostaCerta){
textoPergunta = questao;
alternativas [0] = alternativaA;
alternativas [1] = alternativaB;
alternativas [2] = alternativaC;
alternativas [3] = alternativaD;
this.respostaCerta = respostaCerta;
}
}
Agora para criar as perguntas basta instanciar ela assim, por exemplo:
- Código:
Pergunta pergunta = new Pergunta("Qual é a capital do Brasil?",
"São Paulo", "Brasília", "Rio de Janeiro", "Acre",
respostaCerta: "Brasília");
Então no script do quiz você pode criar uma lista com todos os objetos das perguntas:
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class Quiz : Monobehaviour {
public Text[] UIAlternativas; // UI das alternativas aqui
public Text UIPergunta; // UI da pergunta aqui
private List<Pergunta>() perguntas = new List<Pergunta>();
private int acertos = 0;
void Start(){
CriarPerguntas();
SortearPergunta ();
}
void CriarPerguntas (){
perguntas.Add(new Pergunta ("Em que ano a segunda guerra
mundial acabou?", "1930", "1947", "1945", "1950",
respostaCerta: "1945"));
perguntas.Add("Qual desses animais é um mamífero?", "Águia",
"Baleia", "Sapo", "Formiga", respostaCerta: "Baleia"));
// E assim sucessivamente para suas perguntas....
}
void SortearPergunta (){
var index = Random.Range(0, perguntas.Count);
UIPergunta.text = perguntas [index]. textoPergunta;
for (int i = 0; i < 4; i++){
UIAlternativas[i].text = perguntas [index]. alternativas [i];
}
// Remove pergunta da lista para não repetir:
perguntas.RemoveAt(index);
}
}
Espero que tenha entendido, e com essa ideia inicial vc possa expandir para criar o sistema de acertos e erros.
Tópicos semelhantes
» Como fazer as perguntas ficarem aleatorias em jogo quiz - Unity 2D
» JOGO QUIS - Como fazer as perguntas serem aleatórias?
» sistema de perguntas aleatórias de maneira que elas só se repetissem ao se passar todas
» Rank usando o facebook para JOGO QUIZ
» jogo quiz 2D unity 5...
» JOGO QUIS - Como fazer as perguntas serem aleatórias?
» sistema de perguntas aleatórias de maneira que elas só se repetissem ao se passar todas
» Rank usando o facebook para JOGO QUIZ
» jogo quiz 2D unity 5...
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos