Thema: Delphi Wer wird Millionär

Einzelnen Beitrag anzeigen

mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Wer wird Millionär

  Alt 10. Mär 2016, 19:34
An die Tag Variante hab ich auch schon gedacht
Das ist doch case ... of , oder?

Aber ich weiß nicht was ich dazwischen schreiben soll
muss ich da Button1.Click Button1 TButton1... hinschreiben? oder eine neue Variable definieren?
Ich hab dir mal kurz ein Beispiel gemacht.

Delphi-Quellcode:
unit uWWM;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    ButtonClose: TButton;
    LabelFrageText: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonCloseClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FRichtigBeantwortet: integer;
    FGewinnSumme: double;
  public
    { Public-Deklarationen }
    procedure FrageLaden;
    procedure GewinnSummeAktualisieren;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

// Jeder der 4 Buttons hat dieses "OnClick"-Ereignis
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Sender as TButton).Tag = 0 then
  begin // falsche Antwort
    // ... wiederholen???
    // oder
    ButtonClose.Click;
  end else begin // richtige Antwort
    GewinnSummeAktualisieren;
    FrageLaden;
  end;
end;

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  FRichtigBeantwortet := 0;
end;

procedure TForm1.FrageLaden;
var
  RichtigeAntwort: Integer;
begin
  // Hier Code zum Laden der Frage, z.B. aus einer Datei
  LabelFrageText.Caption := 'Der Text zur Frage';
  // In der Datei muss natürlich angegeben sein, welche Antwort die richtige ist
  RichtigeAntwort := 1; // 2, 3 oder 4;
  // Alle Buttons Tag auf "null"
  Button1.Tag := 0;
  Button2.Tag := 0;
  Button3.Tag := 0;
  Button4.Tag := 0;
  // Welcher Button gibt die richtige Antwort
  case RichtigeAntwort of
    1 : Button1.Tag := 1;
    2 : Button2.Tag := 1;
    3 : Button3.Tag := 1;
    4 : Button4.Tag := 1;
    else raise Exception.Create('Richtige Antwort im ungültigen Bereich 1..4');
  end;
end;

procedure TForm1.GewinnSummeAktualisieren;
begin
  Inc(FRichtigBeantwortet);
  case FRichtigBeantwortet of
    1 : FGewinnSumme := 50.00;
    2 : FGewinnSumme := 100.00;
    3 : FGewinnSumme := 200.00;
    // ... usw.
  end;
end;

end.
@all Sicher kann man das besser lösen, und vor Allem sollte man keine Komponente (in dem Fall den Button) zum Speichern von Daten missbrauchen, also GUI und Daten sauber trennen, das ist mir schon klar. Es geht aber erst mal darum dass der TE vorwärts kommt. Der Rest ergibt sich mit der Zeit von selbst
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat