Problem bei Quiz


Ich wollte gerade ein kleines Quiz zusammenbasteln,klappt soweit auch ganz gut jedoch gibts ein Problem.Am Anfang holt man sich durch den Button "Spiel starten" die erste Frage,die Antworten kann man per Radiobutton auswählen.Beim Klick auf den Checkbutton kommt entweder ne Fehlermeldung,weil die Antwort falsch ist oder eine Bestätigung der richtigen Antwort und danach kommt gleich die nächste Frage.

Problem dabei:

Der Radiobutton ist immer noch markiert und deshalb kommt dann sofort die Meldung,dass die Antwort falsch ist,sobald die nächste Frage da ist,ohne dass der Benutzer eine Antwort auswählen kann.Gibts ne Möglichkeit,den Button unchecked zu machen,bevor die Frage geholt wird?

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    RadioGroup1: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    Button1: TButton;
    MainMenu1: TMainMenu;
    Einstellungen1: TMenuItem;
    SpielStarten1: TMenuItem;
    Beenden1: TMenuItem;
    Info1: TMenuItem;
    procedure Einstellungen1Click(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure SpielStarten1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  fragenzaehler:integer;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Einstellungen1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TForm1.Info1Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.SpielStarten1Click(Sender: TObject);
begin
fragenzaehler := 1;
Form1.Memo1.Text := 'Löse folgende Gleichung nach x auf: 4x + 26 = 5x - 3';
Form1.RadioButton1.Caption :=  'Ergebnis: x = 44';
Form1.RadioButton2.Caption :=  'Ergebnis: x = 29';
Form1.RadioButton3.Caption :=  'Ergebnis: x = 38';
Form1.RadioButton4.Caption :=  'Ergebnis: x = 13';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
If Fragenzaehler = 1 Then
  If Form1.RadioButton2.Checked = True Then
    Begin
    Radiobutton2.Checked := False;
    Showmessage('Diese Antwort ist korrekt :-)');
    Fragenzaehler := 2;
    Form1.Memo1.Text := 'Wie lautet der Satz des Pythagoras?';
    Form1.RadioButton1.Caption :=  'ax² + bx + c = 0';
    Form1.RadioButton2.Caption :=  'h² = p * q';
    Form1.RadioButton3.Caption :=  'A = 1/2 * c * h';
    Form1.RadioButton4.Caption :=  'c² = a² + b²';
    end
  Else
  Showmessage('Die Antwort ist leider falsch.Versuche es erneut.')
else
Showmessage('Bitte zuerst das Spiel starten.');
If Fragenzaehler = 2 Then
  If Form1.RadioButton3.Checked = True Then
    Begin
    Showmessage('Diese Antwort ist korrekt :-)');
    Fragenzaehler := 3;
    Form1.Memo1.Text := 'Wie lautet der Satz des Pythagoras?';
    Form1.RadioButton1.Caption :=  'ax² + bx + c = 0';
    Form1.RadioButton2.Caption :=  'h² = p * q';
    Form1.RadioButton3.Caption :=  'A = 1/2 * c * h';
    Form1.RadioButton4.Caption :=  'c² = a² + b²';
    end
  Else
  Showmessage('Die Antwort ist leider falsch.Versuche es erneut.')
end;

end.

PS: Ich bin Anfänger,also gibts sicher ne Möglichkeit,den Code eleganter zu schreiben ;)

PS2: Ich hätt noch die Möglichkeit,einen Button zum Antwort überprüfen zu machen und einen eigenen zum sich eine neue Frage zu holen,aber zuerst wollte ich eben fragen,ob es auch anders geht ;)

Ein Dankeschön schick ich schonmal vorraus ;)

Nachtrag: Dummerweise wird der Code nicht angezeigt,Gott weiß warum,ich hab ihn schnell hochgeladen,falls er nützlich sein sollte ;)
Quelltext
 
Zuletzt bearbeitet:

Gawayn

Erfahrenes Mitglied
Für mich sieht das so aus, als ob in deiner Methode Button1Click die Prüfung, ob man die 2. Frage richtig beantwortet hat, sofort gemacht wird, nachdem die 2. Frage überhaupt erst angezeigt wurde. Das heißt, dem Spieler wird überhaupt keine Gelegenheit gegeben, die Frage zu beantworten. Das kann ja nicht funktionieren.

Außerdem befindet sich im Else-Zweig der ersten If-Abfrage ein ShowMessage-Befehl, der sagt, man solle doch erst einmal das Spiel starten. Dabei hast du nicht bedacht, dass das Spiel sehr wohl bereits gestartet wurde, wenn man sich in der Frage Nr. 2 befindet. Die If-Abfrage ist also nicht korrekt.

Du musst die Button1Click-Methode neuschreiben, dann klappts auch.

Gawayn
 

Forum-Statistiken

Themen
272.354
Beiträge
1.558.605
Mitglieder
187.825
Neuestes Mitglied
markus.frick