C# - Programa para criar um Quiz
Hoje vou mostrar uma forma bem simples de criar um Quiz usando a linguagem C#. |
Não sabe o que é um Quiz ?
Então vamos recorrer à Wikipedia:
Quiz (em inglês: quiz, plural quizzes) é o nome dado a um jogo ou passatempo no qual os jogadores (individualmente ou em equipes) tentam responder corretamente a questões que lhes são colocadas. Em alguns contextos, a palavra também é utilizada como sinónimo de teste informal para a avaliação de aquisição de conhecimentos ou capacidades em ambientes de aprendizagem.
Então veremos como criar um Quiz com questões de múltipla escolha bem simples onde iremos definir as questões e respostas em um arquivo texto.
Inicialmente temos uma quiz criada em um arquivo chamado quiz1.txt que possui o seguinte conteúdo:
Quiz sobre o Computador 2018
Qual a menor unidade no computador.| Block| Byte | Bit |C
Qual é o dispostivo mais usado no computador.| Discos de Estado Sólido| Mouse| Dísco Rígido|C
O que significa a sigla WWW ?| Wan Wide World. |World Wide Web |Wide Wan Web |B
Qual o nome do programa usado para visualizar páginas.| Internet |Navegador Web |Page Browser |B
Indique o programa que é um processador de textos.| Notepad. |MS-Excel |MS-Word |C
Quantos bits existem em um único byte.| 1 |8 |4 |B
ISP significa :|International Service Provide |Internet Service Printer |Internet Service Provider|C
Quantos bytes existem em 2040 bits ?.| 255 |1024 |100 |A
Cada sistema numérico possui uma base chamada ?|Index|Radix |Subscript|B
Um dispositivo que converte sinal digital para análogico é chamado|Packet |Modem|Block |B
|
Este arquivo esta localizado na pasta Quizzes na raiz do projeto.
Note que no arquivo, após a linha de título, cada linha contém a questão, as opções e a resposta correta.
Então o nosso trabalho será ler e exibir o conteúdo deste arquivo em um formato de Questões de múltipla escolha no formato de uma Quiz.
Criando o projeto no VS 2017 Community
Crie um novo projeto do tipo Windows Forms App(.NET Framework) no Visual Studio 2017 Community com o nome de Quiz.
Controles usados no formulário para apresentar a Quiz:
Disponha os controles conforme o leiaute abaixo:
Inclua no projeto uma classe chamada QuizInfo que representa uma quiz com o código abaixo:
public class QuizeInfo
{
public string[] respostas;
public string respostaCorreta = string.Empty;
public string Questao = string.Empty;
public string SelecionarResposta = "";
public void InitArray(){
respostas = new string[4];
}
}
|
A seguir os principais métodos e eventos usados no projeto:
1- Os namespaces usados no projeto :
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
2 - No início do formulário vamos definir as
variáveis
List<QuizeInfo> quizLista = new
List<QuizeInfo>();
string arquivo_quiz = string.Empty;
string _Resposta = string.Empty;
int _questaoAtual = 0;
3 - No evento Load do formulário inclua o código abaixo que abre uma janela de diálogo que permite selecionar o arquivo da quiz a ser exibido :
private void Form1_Load(object sender, EventArgs e) {
//obtem caminho completo do arquivo quiz1.txt |
4- No método CarregaQuiz() exibe as questões definidas no arquivo texto da quiz :
public void CarregaQuiz(string nomeArquivo)
{
QuizeInfo quizinfo;
string Linha = string.Empty;
bool IsPrimeiraLinha = true;
string[] Linhas = { };
quizLista.Clear();
if (File.Exists(nomeArquivo)) { try { using (StreamReader sr = new StreamReader(nomeArquivo)) { //le o arquivo ate o fim while (!sr.EndOfStream) { Linha = sr.ReadLine().Trim(); if (Linha.Length > 0)
{
//se achou primeira linha obtem o titulo da questão
if (IsPrimeiraLinha)
{
//Define o titulo
Text = Linha;
//proxima linha
Linha = sr.ReadLine().Trim();
}
//Não mais primeira linha
IsPrimeiraLinha = false;
if (!IsPrimeiraLinha)
{
//cria um novo objeto quizinfo
quizinfo = new QuizeInfo();
//Divide a linha
Linhas = Linha.Split('|');
//Cria um array de respostas
quizinfo.InitArray();
//Define a questão
quizinfo.Questao = Linhas[0];
//Define as respostas para a questão
quizinfo.respostas[0] = Linhas[1].Trim();
quizinfo.respostas[1] = Linhas[2].Trim();
quizinfo.respostas[2] = Linhas[3].Trim();
//Define a resposta correta
quizinfo.respostaCorreta = Linhas[4].Trim().ToUpper();
//Preenche a informação da quiz
quizLista.Add(quizinfo);
//Limpa o array
Array.Clear(Linhas, 0, Linhas.Length);
}
}
}
sr.Close();
}
}
catch { }
}
}
|
5 - O método ExibirQuestao() que exibe a primeira questão do Quiz:
void ExibirQuestao(int index) { QuizeInfo q; //Carrega a questaão q = quizLista[index]; //Define as labels lblQuestaoNumero.Text = (index + 1) + "/" + quizLista.Count.ToString(); lblQuestao.Text = q.Questao; //Define as respostas opcaoA.Text = "(A) " + q.respostas[0]; opcaoB.Text = "(B) " + q.respostas[1]; opcaoC.Text = "(C) " + q.respostas[2]; } |
6 - O evento Click da pictureBox que permite navegar para a próxima questão:
private void PicProximo_Click(object sender,
EventArgs e) { _questaoAtual++; //Reseta o indice das questões if (_questaoAtual > quizLista.Count() - 1) { _questaoAtual = quizLista.Count() - 1; //Encerra a quiz CalcularRepostas(); pnlQuestoes.Visible = false; PanelFinal.Visible = true; } ExibirQuestao(_questaoAtual); //Reseta o botão de resposta ResetarResposta(); } |
7 - O método ResetarResposta() que atribuir a resposta do usuário:
public void ResetarResposta() { RadioButton rb = new RadioButton(); string _escolha = _Resposta;
if (_escolha == "A")
{
rb = opcaoA;
}
if (_escolha == "B")
{
rb = opcaoB;
}
if (_escolha == "C")
{
rb = opcaoC;
}
rb.Checked = false;
rb.ForeColor = Color.Black;
PicProximo.Enabled = false;
PicProximo.Image = PicDisabled.Image;
}
|
8 - O método CalcularRespostas() que calcula o resultado e exibe no Panel:
public void
CalcularRepostas() { int x = 0; int Placar = 0; double resultado = 0.0; while (x < quizLista.Count) { if (quizLista[x].respostaCorreta.Equals(quizLista[x].SelecionarResposta)) { Placar += 1; } x++; } resultado = (Placar * 100) / (int)quizLista.Count();
//Exibe o resultado
lblCorreto.Text = Placar.ToString() + "/" + quizLista.Count().ToString();
lblResultado.Text = "Seu Placar é : " + resultado.ToString() + "%";
}
|
6 - O evento Click que permite obter as resposta do usuário na seleção dos controles radiobuttons:
private void optA_Click(object sender, EventArgs e) { RadioButton rb = (RadioButton)sender; _Resposta = (string)rb.Tag; quizLista[_questaoAtual].SelecionarResposta = _Resposta; PicProximo.Enabled = true;
PicProximo.Image = picEnabled.Image;
SelecionarResposta(rb);
}
|
Além disso podemos editar o arquivo texto que monta a quiz e alterar as questões ou ainda criar uma nova quiz:
Executando o projeto iremos obter o seguinte resultado:
O projeto é bem simples e precisa ser melhorado em muitos aspectos, como salvar o resultado e outros recursos a gosto de cada usuário.
Pegue o código do projeto aqui: CriaExibeQuiz.zip
"Porque Deus não nos destinou para a ira, mas para a aquisição da salvação, por nosso Senhor Jesus Cristo."
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Capturando telas - Macoratti
VB .NET - Perguntas e Respostas : Criando um Quiz - Macoratti
Gerador de Questões - Express Test - Macoratti
Visual Basic 6 - Gerador de questionários - Macoratti
Show do Zecão - Macoratti
C# - Capturando e Salvando Imagens da WebCam - Macoratti