Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quiz erstellen (https://www.delphipraxis.net/1758-quiz-erstellen.html)

01Detlef 21. Dez 2002 15:13


Quiz erstellen
 
Quiz erstellen
hallo,
ich möchte ein quiz proggen und möchte dazu arrays benutzen!
ich habe jetzt schon eine procedure, wodurch jeder spieler zwei versuche bekommt für eine frage! ich hatte ein quiz, bei dem jede frage in einem neuen form gespeichert wurde, es entstanden aber viele fehler. Außerdem verwende ich einen Button, vier Labels und ein editfeld.

Also ich möchte jetzt ein Array, in dem alle 15 Antworten gespeichert sind und den jeweils vier Labels ein Text zugewiesen wird! Außerdem soll die Antwort nicht immer z.B a sein, deshalb muss das auch variabel sein!


Code:
var a array[1..15] of integer;
Begin for i:=1 to 15 do
begin.....;

Ich weiss jetzt nicht, wie ich das alles verbinden kann,
vier mögliche Antworten, verschiedene Reihenfolge der richtigen Antworten und das nachdem die erste richtig beantwortet wurde die nächste erscheint???


Danke Detlef

Christian Seehase 21. Dez 2002 15:29

Moin Detlef,

erst einmal herzlich willkommen.

Ich denke mal als erstes solltest Du Dir mal Gedanken über die Daten (Struktur) machen.

Eine Möglichkeit wäre es, die Fragen, inclusive der Antwortmöglichkeiten, und der Kennung der korrekten Antwort in einer Ini Datei zu speichern.

z.B. in diesem Stile
[Frage1]
text=Hier die Frage
A1=Erste Antwortmöglichkeit
A2=Zweite Antwortmöglichkeit
...
korrekt=A1

Die könntest Du dann mit Hilfe eines TIniFile auslesen, auf die Label verteilen, und Dir merken welche der vier die richtige Antwort wäre.

Die Daten kannst Du dann natürlich auch in Arrays einlesen.

(Soll wohl eine WWM Variante werden ;-))

01Detlef 21. Dez 2002 17:19

danke,

ich verstehe das mit der ini-datei nicht, was soll ich machen?

Welche Möglichkeit gibt es denn noch die Daten zu speichern?
Deinen Vorschlag kann ich doch auch mit if-anweisungen machen, oder?

Danke Detlef

Christian Seehase 21. Dez 2002 17:34

Moin Detlef,

schau Dir doch mal die Hilfe zu TIniFile an.

Dabei speziell die Methode ReadString.

Du kannst natürlich auch die ganzen Fragen und Antworten fest in das Programm schreiben, aber das wäre doch recht unflexibel.

Das mit dem if hab' ich jetzt nicht verstanden.

ssach 21. Dez 2002 19:05

Zusatz variable
 
y,

zunachst wuerde ich an deien stelle mal ein array of string nutzen, aber du kannst ja a,b,.. durch 1,2..ersetzen!
also mein vorschlag ist du benutzt einfach eine hilfsvariable, bei der du nach jeder antworteinfach zb. zusatvariable = i
Delphi-Quellcode:
a[i] := Antwort;
i := i +1
dann hast du bei a immer die position der frage die gerade dranist,hoffe konnte di rhelfen!
cu[/b]

01Detlef 22. Dez 2002 13:07

vielen dank,

aber ehrlich gesagt, weiss ich nicht wie ich jetzt anfangen soll! Also habe ich das jetzt richtig verstanden, die richtigen Antworten in einem Array speichern, die gesamten Fragen in einem speichern und wie ist das mit der Reihenfolge?

Danke Detlef

Christian Seehase 22. Dez 2002 13:14

Moin Detlef,

wie willst Du es denn mit den erforderlichen Daten, halten:
Sollen die aus einer externen Datei eingelesen werden, oder willst Du die fest im Programm einbauen?

01Detlef 22. Dez 2002 15:51

Als ich weiss nicht, welche Vorteile oder Nachteile die beiden Möglichkeiten haben!
Du meintest ja, das die externe Variante besser flexibler sei, also könnte ich das so versuchen!

Detlef

Christian Seehase 22. Dez 2002 16:50

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:
  1. 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
  2. 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.

01Detlef 23. Dez 2002 09:13

Code:
type
  TcsQuiz =
  record
    sQuestion : string;
    sAnswers : array [1..4] of string;
    iCorrect : integer;
  end;

var
  aqQuiz : array [1..15] of TcsQuiz;
Wenn ich nach diesem vorgehen möchte, dann muss ich doch eine For-Schleife für den array [1..15] aufbauen und darin die anderen Infos speichern? Meine Frage ist, wie rufe ich den Array answers jetzt darin aus? ( aqQuiz[1]:= sanswer[1]:= ??).
Den Quelltext schreibe ich doch in die Button.click-prozedur?

Code:
PROCEDURE Button.klick...
var i : Integer;
BEGIN
  FOR j:=1 TO 15 Do BEGIN
     aqQuiz[1]:= // hier kommen jetzt die Zuweisungen für die erste    
                    Frage hin, sQuestion, sAnswers, sCorrect
     aqQuiz[2]:= // zweite Frage
  end;
END;
Detlef


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.
Seite 1 von 2  1 2      

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