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
Dilip

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

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

  Alt 13. Mär 2016, 13: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
 
#2

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

  Alt 13. Mär 2016, 13: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
 
#3

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

  Alt 13. Mär 2016, 14: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
 
#4

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

  Alt 13. Mär 2016, 14: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 14: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
 
#5

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

  Alt 13. Mär 2016, 14: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
Dilip

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

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

  Alt 13. Mär 2016, 14:58
@ Monday, ja hab begin und end überall, hab es genau so, wie du es geschrieben hast und trotzdem nimmt er immer die letzten A-möglichkeiten

@Jens, ja könnte ich machen
Dennoch würde ich das Problem gern gelöst haben, das interessiert mich jetzt, warum der das nicht macht..
  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:11
Ok, ich hab es jetzt hinbekommen ( wie auch immer ) ich hab alle begins und ends nochmal weg gemacht und neu hingeschrieben, jetzt gehts komischerweise
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

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

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

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

 

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 14:48 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