AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Button soll sich merken, wie oft er gedrückt wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Button soll sich merken, wie oft er gedrückt wurde

Ein Thema von Dilip · begonnen am 10. Mär 2016 · letzter Beitrag vom 13. Mär 2016
Antwort Antwort
Seite 1 von 2  1 2      
Dilip

Registriert seit: 3. Mär 2016
10 Beiträge
 
#1

Button soll sich merken, wie oft er gedrückt wurde

  Alt 10. Mär 2016, 17:07
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?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 10. Mär 2016, 17:18
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 10. Mär 2016, 17:24
Dies geht leider nicht, ist aber auch nicht nötig denke ich. Du musst dir (gerne mit unserer Hilfe) in dem anderen Thread zum gleichen Thema (WWM) eine vernünftige Struktur für das Programm überlegen. Dann wirst du sehen, dass nicht der Button sich merk, wie oft er gedrückt wurde, sondern das sich dein Programm in entsprechenden Variablen merken muss bei welcher Frage er gerade ist, welcher Button der richtige Antwort entspricht usw.
Ralph
  Mit Zitat antworten Zitat
mm1256

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

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 10. Mär 2016, 17:27
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..
Schau dir mal die Property "Tag" des Buttons an. Die könnte dein Freund sein. Der Button mit der richtigen Antwort bekommt z.B. beim Laden einer Frage das Tag "1" und die anderen Buttons das Tag "0". Somit weiß jeder der Buttons, ob er eine Frage richtig oder falsch beantwortet, und du weißt was beim Button.Click zu tun ist
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
Dilip

Registriert seit: 3. Mär 2016
10 Beiträge
 
#5

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 14:10
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
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 14:33
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?
  Mit Zitat antworten Zitat
Dilip

Registriert seit: 3. Mär 2016
10 Beiträge
 
#7

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 15:12
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
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 15:32
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;

Geändert von Monday (13. Mär 2016 um 15:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 15:51
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:
type
  TFragen = record
    Frage : string;
    Antwort_1: string;
    Antwort_2: string;
    Antwort_3: string;
    Antwort_4: string;
    Richtig : integer;
  end;
Da Du ja 16 Fragen brauchst, kannst Du das ganze Record in ein array packen...

so z.B.

  Fragenkatalog : array[1..16] of TFragen; Jetzt kannst Du aus dem Array Deine Fragen etc. auslesen.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#10

AW: Button soll sich merken, wie oft er gedrückt wurde

  Alt 13. Mär 2016, 15:56
Zwei Sachen:
...
2. Random + i gehört eher hier hin

procedure TForm1.BitBtn1Click(Sender: TObject);
var i:longint;
begin
randomize;
i := random(3)+1;
[...
Randomize sollte nur ein mal aufgerufen werden, z.B. im OnCreate- oder OnShow-Ereignis des Formulars

und . . . irgendeine Struktur für das Programm solltest Du schon haben (siehe Post #2), sonst tippts Du Dir 'nen Wolf . . .
Markus H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz