![]() |
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
|
Re: Probleme mit Quizprogramm
Mein Junge hat mit 14 Jahren eine kleine Rezeptverwaltung mit BDE-Verwendung gebastelt und hat nur etwas Hilfe dabei gebraucht.
Also zum lernen ist das m.E. ein guter Weg... ...wiederholte monatelange Diskussionen darüber können wir uns aber vielleicht lieber schenken ;-) |
Re: Probleme mit Quizprogramm
Ich benutze Turbo Delphi 2006 kostenlose Version.
Wie kann ich eine DB bzw. BDE erstellen? |
Re: Probleme mit Quizprogramm
Die BDE ist die Borland Database Engine, welche den Zugriff auf lokale Desktop-Datenbanken (dBase, Paradox) ermöglichen und für diese eine SQL-Schnittstelle ( LocalaSQL) bieten. Sie wird aber seit Jahren nicht mehr weiterentwickelt und seit D6 als veraltetet deklariert. Teil der BDE-Distribution ist die Datenbankoberfläche, mit der man Datenbanken erstellen kann.
|
Re: Probleme mit Quizprogramm
Also dann kannst Du nicht auf die BDE zurückgreifen.
Eine Datenbank muss man aber IRGENDWANN schon mal nutzen. Für den Fall, dass Du Dich mal damit befassen willst würde ICH mir an Deiner Stelle mal TClientDataSet und XML anschauen. Evtl. reicht auch eine Ini-Datei für Dich aus (TIniFile). Als "richtige" Datenbank käme vielleicht Firebird (embeded) in Frage, das wird aber schon etwas komplizierter. Ich fand die BDE zum Lernen daher ganz gut. Zum Thema "Welche Datenbank?" gibt es hier mehrere Beiträge im Forum... stahli PS: Schreib mal in Deinem Profil hier im Forum, welche Delphi-Version Du nutzt... |
Re: Probleme mit Quizprogramm
Die BDE ist bei TDE dabei. Aber wie gesagt, veraltet. Übrigens finde ich nicht das FB u.ä. komplizierter zu verwenden sind, wie Desktopdatenbanken.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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