![]() |
Button soll sich merken, wie oft er gedrückt wurde
Hey ich habe vor Wer wird Millionär zu programmieren und habe das problem, dass ich ja nur 4 Buttons habe, auf denen die Antwortmöglichkeit stehen, ein Label auf der die Frage steht
Ich würde gern wissen, wie der Button sich merken kann, dass er beim ersten mal drücken etwas macht, beim 2. mal drücken etwas anderes ( mal steht auf dem Button die richtige antwort und es muss weiter gehen und mal die falsche und das Spiel wäre vorbei.. Ich könnte zwar auch mit 15*4 = 60 Buttons arbeiten und 54 davon unsichtbar machen, ist aber seeehr umständlich ( weil man ja jedes mal eingeben muss button1.visible := false; ... oder kann man mehrere Buttons aufzählen? |
AW: Button soll sich merken, wie oft er gedrückt wurde
Du solltest mit 2 Ebenen arbeiten:
Eine Datenliste (z.B. Datenbank oder Text-Datei), in der jeweils die Fragen und zugehörigen 4 möglichen Antworten stehen und die Nr. der richtigen Antwort. Das Formular benutzt denn einen Zähler und zeigt die erste Frage an. Beim Drücken eines Buttons wird dann geprüft, ob die Button-Nr. zur richtigen Antwort passt. Dann wird der Zähler erhöht und die zweite Frage angezeigt. So kannst Du leicht die Fragen austauschen und erweitern, ohne das Programm neu erzeugen zu müssen. |
AW: Button soll sich merken, wie oft er gedrückt wurde
Dies geht leider nicht, ist aber auch nicht nötig denke ich. Du musst dir (gerne mit unserer Hilfe) in dem
![]() |
AW: Button soll sich merken, wie oft er gedrückt wurde
Zitat:
|
AW: Button soll sich merken, wie oft er gedrückt wurde
Hey, ich hab jetzt einfach selber versucht etwas hinzubekommen und für mich klappt es schon sehr gut ( auch wenn der Quelltext wahrscheinlich viel zu viel ist und wesentlich leichter realisierbar wäre ^^ )
Ich habe es jetzt geschafft, dass ich 15 Fragen habe, bei richtiger Antwort gehts weiter, bei falscher hört es auf.. Alles super soweit Jetzt möchte ich gern, da es sonst langweilig wird, Zufallsfragen haben ich habe es wiefolgt versucht procedure Frage1(i:longint); begin randomize; i := random(3)+1; if i = 1 then Form1.Label2.Caption := '"Andere Länder, andere ...?"'; //1. Frage Form1.Button1.Caption := 'Fritten'; Form1.Button2.Caption := 'Schlitten'; Form1.Button3.Caption := 'Sitten'; Form1.Button4.Caption := 'Oberweiten'; if i = 2 then Form1.Label2.Caption := '"Was ist 2+2?"'; //1. Frage Form1.Button1.Caption := '2'; Form1.Button2.Caption := '3'; Form1.Button3.Caption := '4'; Form1.Button4.Caption := '5'; if i = 3 then Form1.Label2.Caption := '"Blablabla'; //1. Frage Form1.Button1.Caption := 'Falsch'; Form1.Button2.Caption := 'Falsch'; Form1.Button3.Caption := 'Richtig'; Form1.Button4.Caption := 'Falsch'; end; procedure TForm1.BitBtn1Click(Sender: TObject); var i:longint; begin Button1.Tag := 0; Button2.Tag := 0; Button3.Tag := 0; Button4.Tag := 0; Frage1(i); end; Bei Klick auf den BitBtn wird die Procedure Frage1 aufgerufe In dieser soll eine von den 3 Fragen zufällig ausgewählt werden Ich habe das Problem, dass sich nur die Fragen ändern, die Antwortmöglichkeiten aber immer die selben ( Amöglichkeiten sind immer die, aus i = 3) sind und nicht zur Frage passen.. Wo habe ich da einen Fehler gemacht? Das Programm startet auch, aber es steht da 'i' does not seem to be initialized |
AW: Button soll sich merken, wie oft er gedrückt wurde
Zwei Sachen:
1. If Abfragen sollten so aussehen: if .. then BEGIN ... END; Begin/End fehlt bei dir 2. Random + i gehört eher hier hin procedure TForm1.BitBtn1Click(Sender: TObject); var i:longint; begin randomize; i := random(3)+1; [...] Frage1(i)=> was ist "i"? ( Das Programm startet auch, aber es steht da 'i' does not seem to be initialized ). Für die weitere Bearbeitung: Der Block mit den Button1.Tag := 0; was soll mit denen geschehen? |
AW: Button soll sich merken, wie oft er gedrückt wurde
Ja, das begin und end hab ich noch reingemacht, ist mir dann auch aufgefallen..
Ich hab es jetzt in die Klickprocedure geschrieben aber es geht immernoch nicht Es sieht aber so aus als ob sich die Antwortmöglichkeiten für gefühlt 0,0001Sekunde ändern, aber dann sind sie wieder bei Falsch Falsch Richtig Falsch Ich hab es mal mit Label statt buttons versucht, ging aber auch nicht |
AW: Button soll sich merken, wie oft er gedrückt wurde
Hast du auch überall Begin und End vervollständigt? Falls nicht, rattert er sonst durch und nimmt dann eben die letzten Antworten.
(Wenn du das begin/end bei if weglässt, berücksichtigt er genau nur den nächsten Befehl für die Abfrage. Den rest sieht er wieder als normalen Ablauf an, was hier nicht sein sollte)
Delphi-Quellcode:
procedure Frage1(i:longint); begin if i = 1 then begin Form1.Label2.Caption := '"Andere Länder, andere ...?"'; //1. Frage Form1.Button1.Caption := 'Fritten'; Form1.Button2.Caption := 'Schlitten'; Form1.Button3.Caption := 'Sitten'; Form1.Button4.Caption := 'Oberweiten';end; if i = 2 then begin Form1.Label2.Caption := '"Was ist 2+2?"'; //1. Frage Form1.Button1.Caption := '2'; Form1.Button2.Caption := '3'; Form1.Button3.Caption := '4'; Form1.Button4.Caption := '5'; end; if i = 3 then begin Form1.Label2.Caption := '"Blablabla'; //1. Frage Form1.Button1.Caption := 'Falsch'; Form1.Button2.Caption := 'Falsch'; Form1.Button3.Caption := 'Richtig'; Form1.Button4.Caption := 'Falsch';end; end; procedure TForm1.Button5Click(Sender: TObject); var i:longint; begin randomize; i := random(3)+1; Button1.Tag := 0; Button2.Tag := 0; Button3.Tag := 0; Button4.Tag := 0; Frage1(i); end; |
AW: Button soll sich merken, wie oft er gedrückt wurde
Hallo Dilip,
ich glaube, dass Du Grundlegend das Problem anders angehen solltest. "Sieh die nochmal die antwort von Stahli an". Ich würde folgendes Vorschlagen. Erstell Dir eine Art Fragenkatalog. Das könntest Du z.B. als Textdatei, DB oder ähnliches machen. Beim Programmstart, könntest Du verschiedenen Abfragen machen um festzulegen, welche Variante der Spieler spielen möchte (Zusatz Jocker etc.) Dann kannst Du per Zufall 16 aus den vorhanden Fragen auslesen und diese in z.B. ein Record schreiben...
Delphi-Quellcode:
Da Du ja 16 Fragen brauchst, kannst Du das ganze Record in ein array packen...
type
TFragen = record Frage : string; Antwort_1: string; Antwort_2: string; Antwort_3: string; Antwort_4: string; Richtig : integer; end; so z.B.
Delphi-Quellcode:
Jetzt kannst Du aus dem Array Deine Fragen etc. auslesen.
Fragenkatalog : array[1..16] of TFragen;
|
AW: Button soll sich merken, wie oft er gedrückt wurde
Zitat:
und . . . irgendeine Struktur für das Programm solltest Du schon haben (siehe Post #2), sonst tippts Du Dir 'nen Wolf . . . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz