Moin Detlef,
mal so überlegt:
Willst Du die Fragen und Antworten ändern, müsstest Du bei fest im Programm hinterlegten Daten jedesmal das Programm ändern.
Sind die Daten in einer Datei ausgelagert, muss nur diese geändert/ergänzt werden, damit Du neue Fragen und Antworten zur Verfügung hast.
Zugegeben, die Idee diese Daten in eine INI Datei zu schreiben, ist natürlich nicht das Optimum, da ja jeder problemlos da reinschauen und mogeln kann, aber für den Einstieg, ist es eine recht leicht zu handhabende Lösung.
Damit's für den Anfang nicht zu kompliziert wird, würde ich mal vorschlagen, von nur einem einzigen Satz von 15 Fragen auszugehen, die in der Datei stehen sollen.
Eine Erweiterung auf mehrere Sätze kann dann ja immer noch kommen.
Dazu mal kurz der grundlegende Aufbau einer INI Datei:
Diese Dateien sind unterteilt in Sections Idents, und Values
Sections sind die zusammengehörigen Blöcke, Idents dann die einzelnen Einträge innerhalb der Blöcke.
Das könnte dann z.b. so aussehen:
[Frage1] <= Dies wäre eine Section
Frage=Das ist hier die Frage <= Frage wäre hier der Ident, Das ist hier die Frage der Value
Die Fragendatei hätte dann also beispielsweise so einen Aufbau:
[Frage1]
Frage=Hier der Text der ersten Frage
Antwort1=1. Antwortmöglichkeit
Antwort2=2. Antwortmöglichkeit
Antwort3=3. Antwortmöglichkeit
Antwort4=4. Antwortmöglichkeit
Korrekt=3
Hierbei habe ich dann angenommen, dass die Antwort3 die richtige Antwort ist.
Um diese Daten jetzt zu benutzen bräuchtest Du eigentlich noch nicht einmal mehr Arrays, da Du die Daten direkt aus der Datei heraus auslesen könntest.
Sollen die Daten vorab komplett eingelesen werden (in Arrays eben), sehe ich, was die Übersichtlichkeit angeht, zwei Lösungen:
- Sechs Arrays mit jeweils 15 Einträgen, davon eines für die Fragen, vier für die Antwortmöglichkeiten, und eines für korrekte Antwort
- Ein Array mit 15 Einträgen, wobei dann ein eigener Datentyp als Typ benutzt wird, der alle Daten je Frage enthält.
Beide Varianten wären leicht einzubauen, und recht übersichtlich, die 1. wäre allerdings recht umständlich zu schreiben.
(Ich hatte auch noch die Idee das Ganze über ein mehrdimensionales Array mit Standardtypen zu machen, aber ich finde, dass man da leicht die Übersicht verlieren kann, auch wenn's nur drei Dimensionen geworden wären).
Der erste Fall sähe dann so aus (Datendeklaration):
Delphi-Quellcode:
var
asQuestions : array [1..15] of string;
asAnswer1 : array [1..15] of string;
asAnswer2 : array [1..15] of string;
asAnswer3 : array [1..15] of string;
asAnswer4 : array [1..15] of string;
aiCorrect : array [1..15] of integer;
und der zweite so:
Delphi-Quellcode:
type
TcsQuiz =
record
sQuestion : string;
sAnswers : array [1..4] of string;
iCorrect : integer;
end;
var
aqQuiz : array [1..15] of TcsQuiz;
Das Einlesen von Daten aus einer INI Datei sähe, allgemein, so aus:
(unter uses muss noch inifiles hinzugefügt werden)
Ein Beispiel für den Umgang mit TIniFile, keine Komplettlösung für Dein Programm:
Delphi-Quellcode:
var
iniQuiz : TIniFile;
sTextValue : string;
iIntValue : integer;
begin
// Ini Datei 'Quiz.ini' öffnen
// paramstr(0) enthält den Pfad des Programmes (incl. Dateiname)
iniQuiz := TIniFile.Create(ExtractFilePath(paramstr(0))+'Quiz.ini');
try
sTextValue := iniQuiz.ReadString('Frage1','Frage','');
iIntValue := iniQuiz.ReadInteger('Frage1','Korrekt',0);
finally // Belegte Resourcen wieder freigeben
FreeAndNil(iniQuiz);
end;
end;
Versuch doch mal, ob Du damit erst einmal klarkommst.