AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Quizprogramm

Ein Thema von Fantasy · begonnen am 21. Feb 2008 · letzter Beitrag vom 24. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Fantasy

Registriert seit: 25. Nov 2007
4 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme mit Quizprogramm

  Alt 21. Feb 2008, 12:29
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.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Some questions

  Alt 21. Feb 2008, 12:37
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Some questions

  Alt 21. Feb 2008, 12:46
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).

function IsCorrectAnswer(QuestionID: Integer; AnswerID: Integer): Boolean; 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.

Grüße
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#4

Re: Some questions

  Alt 21. Feb 2008, 12:50
Zitat:
Ich will aber, dass die Fragen zufällig auftretten und die beantworteten Fragen sollen nicht wieder erscheinen.
Dazu brauchst du eine Liste, die alle Fragen beinhaltet und jeder Eintrag ein entsprechendes Flag hat, der sagt, ob sie schon erschienen ist oder nicht.
Zum Bleistift:
Delphi-Quellcode:
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;
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.
Delphi-Quellcode:
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;
Und am Ende nicht vergessen, den ganzen Spaß wieder freizugeben!
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;
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

Re: Probleme mit Quizprogramm

  Alt 21. Feb 2008, 12:58
Hi Fantasy,

es ist eigentlich schon alles gesgt, aber Du kannst mal noch hier schauen...

stahli
  Mit Zitat antworten Zitat
Fantasy

Registriert seit: 25. Nov 2007
4 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Probleme mit Quizprogramm

  Alt 24. Mär 2008, 14:16
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:
Für letztere könntest du die Tag-Eigenschaft der Buttons nutzen.
Ich habe diese Tag-Eigenschaft der Buttons gefunden, aber weiß nicht wie man sie benutzt. Könnt ihr das erklären?


@stahli
Ich habe das Thema gelesen, leider habe ich keine Erfahrung mit der Datenbank...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Probleme mit Quizprogramm

  Alt 24. Mär 2008, 14:18
In ihr kannst du einen Integer ablegen und später Auswerten.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

Re: Probleme mit Quizprogramm

  Alt 24. Mär 2008, 14:25
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).
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#9

Re: Probleme mit Quizprogramm

  Alt 24. Mär 2008, 14:34
@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
Ralph
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Probleme mit Quizprogramm

  Alt 24. Mär 2008, 14:39
Und wenn schon DB, dann nicht die BDE
Markus Kinzler
  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 10:03 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