![]() |
Probleme mit Quizprogramm
Ich arbeite an einem Programm, welches dem User eine Frage stellt und dann 4 Antwortmöglichkeiten bietet.
Dabei habe ich vor, viele verschiedene Frage zu stellen, aber dabei muss ich viele Buttons verwenden und die Fragen kommen in einer festgelegte Reihenfolge (siehe Quelltext). Gibt es einen Möglichkeit, weniger Buttons zu verwenden, weil wenn z.B. ich 50 Fragen stelle, muss ich auch etwa 50 Buttons verwenden. Ich will aber, dass die Fragen zufällig auftretten und die beantworteten Fragen sollen nicht wieder erscheinen. Außerdem sollten Fragen in einer bestimmten Zeit beantwortet werden, wenn nicht, dann gilt das als falsch und die nächste Frage soll kommen. Ich weiß aber leider nicht, wie ich das hinbekomme. :gruebel: Ich würde mich freuen, wenn ihr mir so schnell wie möglich helfen könntet.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject); // Programm startet
begin panel1.Caption:='Wo liegt Deutschland?'; // Erste Frage Radiobutton1.Caption:='Asien'; Radiobutton2.Caption:='Europa'; Radiobutton3.Caption:='Afrika'; Radiobutton4.Caption:='Nordamerika'; button2.Visible:=false; button3.Visible:=false; end; procedure TForm1.Button1Click(Sender: TObject); //Nutzung 1. Button begin if Radiobutton2.Checked = true then showmessage('richtig') else showmessage('falsch'); panel1.Caption:='Wo liegt Kongo?'; // 2. Frage Radiobutton1.Caption:='Australia'; Radiobutton2.Caption:='Europa'; Radiobutton3.Caption:='Afrika'; Radiobutton4.Caption:='Nordamerika'; button2.Visible:=true; end; procedure TForm1.Button2Click(Sender: TObject); // Nutzung 2. Button begin if Radiobutton3.Checked = true then showmessage('richtig') else showmessage('falsch'); panel1.Caption:='Wo liegt Rom ?'; // 3. Frage Radiobutton1.Caption:='Italien'; Radiobutton2.Caption:='Spanien'; Radiobutton3.Caption:='Mexiko'; Radiobutton4.Caption:='Russland'; button3.Visible:=true; end; procedure TForm1.Button3Click(Sender: TObject); // Nutzung 3. Button begin if Radiobutton1.Checked = true then showmessage('richtig') else showmessage('falsch'); end; end. |
Re: Some questions
Bitte gibt deinem Thread eine sinnvolle Überschrift, die etwas über das problem aussagt. Das fällt leichter, wenn man nur eine bzw. nur thematlich zusammenhängende Frage in einem Thread stellt. Du kannst den Titel ändern, in dem du dein erstes Posting editierst.
|
Re: Some questions
Hallo,
du kannst dir beispielsweise eine Funktion schreiben, deren Deklaration folgendermaßen aussieht. Diese Funktion vergleicht dann die Parameter mit den angegebenen in der XML-Datei (oder wo die Daten herkommen).
Delphi-Quellcode:
QuestionID ist die ID deiner Frage und AnswerID die deiner Antwort (1-4). Für letztere könntest du die Tag-Eigenschaft der Buttons nutzen.
function IsCorrectAnswer(QuestionID: Integer; AnswerID: Integer): Boolean;
Grüße |
Re: Some questions
Zitat:
Zum Bleistift:
Delphi-Quellcode:
Das könnte der Pool deiner verfügbaren Fragen sein. Du weißt die Anzahl der Fragen (AvailableQuestions.Count) und kannst darauf ein Random ausführen, um aus diesem Bereich eine zufällige zu ziehen. Das kannst du auch in eine Schleife packen und mit AlreadyAsked prüfen, ob die Frage schon vorgekommen ist und wenn ja, weitermachen.
type
TQuestion = record Id: Integer; // << Kann nicht schaden, 'ne Id zu haben Question: String; // << Die Frage Answers: TStringList; // << Musst du jedesmal per Answers:= TStringList.Create instanzieren! CorrectAnswer: Integer; // << Musst du vorgeben AlreadyAsked: Boolean; // << TRUE, wenn schon vorgekommen, FALSE wenn nicht end; PQuestion = ^TQuestion; var AvailableQuestions: TList; Question: PQuestions; a: Integer; begin AvailableQuestions := TList.Create; try New (Question); with Question^ do begin Id := 1; // nächste 2, 3, ... usw Question := 'Wo liegt Deutschland?'; Answers := TStringList.Create; Answers.Add ('Asien'); Answers.Add ('Europa'); // ... CorrectAnswer := 1; // von 0 beginnend AlreadyAsked := FALSE; end; AvailableQuestions.Add (Question); New (Question); with Question^ do begin Id := 2; // nächste 3, 4, ... usw Question := 'Wie spät ist es?'; Answers := TStringList.Create; Answers.Add ('Fünf vor um'); Answers.Add ('Immer jetzt'); // ... CorrectAnswer := 1; // von 0 beginnend AlreadyAsked := FALSE; end; AvailableQuestions.Add (Question); // ... end;
Delphi-Quellcode:
Und am Ende nicht vergessen, den ganzen Spaß wieder freizugeben! ;)
var
RndIdx: Integer; Question: PQuestion; begin Randomize; while TRUE do begin RndIdx := Random (AvailableQuestions.Count); Question := PQuestion (AvailableQuestions[RndIdx]); if Questions.AlreadyAsked then Continue else Break; end; end;
Delphi-Quellcode:
var
Idx: Integer; Question: PQuestion; begin for Idx := AvailableQuestions.Count - 1 downto 0 begin Question := PQuestion (AvailableQuestions[Idx]); FreeAndNil (Question.Answers); Dispose (Question); end; AvailableQuestions.Clear; FreeAndNil (AvailableQuestions); end; |
Re: Probleme mit Quizprogramm
|
Re: Probleme mit Quizprogramm
Vielen Dank für eure Antwort.
Ich bin leider ein Anfänger. :( Deshalb weiß ich nicht wie man die Fragen und Antworten sichtbar machen kann? Also welchen Tools muss ich auf der Formular hinführen und wie kann ich sie benutzen? Zitat:
@stahli Ich habe das Thema gelesen, leider habe ich keine Erfahrung mit der Datenbank... |
Re: Probleme mit Quizprogramm
In ihr kannst du einen Integer ablegen und später Auswerten.
|
Re: Probleme mit Quizprogramm
Mit einer Datenbank müsstest Du Dich schon mal beschäftigen...
Auf die Dauer geht es ohne kaum. Aber so schwierig ist das letztlich auch nicht. Die Daten werden mehr oder weniger in Tabellen gespeichert und daraus wieder abgerufen. Die BDE, Datenbankoberfläche und DBASE bieten sich dafür ganz gut an (je nachdem, welche Delphi-Version Du hast). |
Re: Probleme mit Quizprogramm
@stahli - sehe ich etwas anders! Als absoluter Anfänger sollte es erst einmal ohne Datenbank gehen. Ein "Anfängerprojekt", das eine Datenbank erfordert oder nahelegt, ist m.E. kein Anfängerprojekt mehr. Als Anfänger sollte man sich erst einmal um die vielen anderen "Basics" bemühen und damit eine gewisse Vertrautheit erlangen. Danach ist immer noch Zeit sich mit Datenbanken zu beschäftigen
|
Re: Probleme mit Quizprogramm
Und wenn schon DB, dann nicht die BDE
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 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