C#: miniaplicație quiz cu răspuns unic și scor
Construiește un quiz Windows Forms cu întrebări, opțiuni și scor. Controlează trecerea la întrebarea următoare și previne punctarea repetată a răspunsului.
În acest material
Combinăm controalele și regulile într-un quiz cu două întrebări originale. Aplicația afișează o întrebare, cere alegerea unei opțiuni și trece la următoarea numai după evaluare. Scorul nu este citit din label. Indexul întrebării și scorul sunt starea sesiunii, iar metoda ShowQuestion reconstruiește interfața din această stare.
Cum lucrezi cu exemplul
Exemplul complet se compilează ca Windows Forms App pe .NET Framework 4.8, cu C# 7.3. Deschide Lesson.csproj din arhivă în Visual Studio pe Windows. Rulează scenariile descrise mai jos; verificarea compilării nu înlocuiește testarea ferestrei și a dispozitivelor folosite.
Descarcă sursele și instrucțiunile.
Ideea și pașii de implementare
ListBox afișează opțiunile în aceeași ordine ca cheia numerică a întrebării. SelectedIndex este potrivit aici ca index în opțiunile acelei întrebări, nu ca ID persistent de entitate. Lipsa selecției oprește evaluarea. După acceptare, indexul crește o singură dată, iar opțiunile sunt înlocuite.
La final dezactivăm butonul și lista. Handler-ul verifică suplimentar indexul pentru a păstra regula chiar dacă starea vizuală ar fi schimbată ulterior. Exemplul nu are persistare și nici autentificare: rezultatul aparține rulării curente.
Exemplu și rezultat așteptat
Pentru 2+3 alegi 5, iar pentru numărul de elemente din [4,7,9] alegi 3. Obții 20 de puncte. Dacă prima alegere este 6 și a doua este 3, obții 10. Apăsarea butonului fără alegere nu trece la întrebarea următoare.
Întrebare 0: 2+3 → Alegere 5 → +10 → Întrebare 1: Length → Final: cel mult 20.Mărește schema ↗
Codul complet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LessonForm());
}
}
class LessonForm : Form
{
readonly string[] questions={"Cat este 2 + 3?","Cate elemente are [4,7,9]?"};
readonly string[][] answers={new[] {"4","5","6"},new[] {"2","3","4"}};
readonly int[] keys={1,1}; int index,score;
readonly Label prompt=new Label {Left=20,Top=20,Width=380};
readonly ListBox choices=new ListBox {Left=20,Top=55,Width=260,Height=100};
readonly Button submit=new Button {Left=20,Top=175,Width=150,Text="Raspunde"};
public LessonForm() {
Text="Quiz";ClientSize=new Size(440,240);
submit.Click += (s,e) => {
if(index>=questions.Length || choices.SelectedIndex<0)return;
if(choices.SelectedIndex==keys[index])score+=10;index++;ShowQuestion();
};
Controls.AddRange(new Control[] {prompt,choices,submit});ShowQuestion();
}
void ShowQuestion() {
choices.Items.Clear();
if(index==questions.Length) {prompt.Text="Final. Scor: " + score;submit.Enabled=false;choices.Enabled=false;return;}
prompt.Text=questions[index];choices.Items.AddRange(answers[index]);choices.SelectedIndex=-1;
}
}
Greșeli și limite
Nu amesteca ordinea opțiunilor fără să actualizezi cheia răspunsului. Nu permite două evaluări pentru aceeași întrebare prin butoane diferite. Nu considera că un label cu scorul final este și dovadă de salvare. Pentru reluare, resetează explicit indexul, scorul și starea controalelor.
Exersează
Parcurge toate combinațiile de corect și greșit pentru cele două întrebări: scorurile posibile sunt 0, 10 și 20. Testează lipsa selecției înaintea fiecărui răspuns. Adaugă un buton Reia și verifică faptul că o sesiune nouă pornește de la zero, fără opțiunea rămasă selectată.
Continuă parcursul
Parcursul complet de 50 de lecții
Lecția precedentă: C#: Undo și Redo pentru modificări controlate
Lecția următoare: C#: miniaplicație cu grilă și stare separată de butoane.
Referință: documentația Microsoft.
Întrebări frecvente
De ce verific indexul și în handler?
Regula de finalizare trebuie păstrată și în logică, nu doar prin dezactivarea vizuală a butonului.
Pot amesteca opțiunile?
Da, dar trebuie să păstrezi asocierea dintre opțiune și corectitudine.
Scorul se păstrează după închidere?
Nu în acest exemplu. Persistarea este o funcție separată, care necesită salvare și recitire.
Un pas mai departe
Autentifică-te pentru a păstra progresul în cont.