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;