Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#32

AW: Wer wird Millionär mit Delphi

  Alt 16. Jan 2013, 14:09
Um diesen Thread noch zu retten, kehre ich mal wieder zum Thema zurück

Ihr solltet nun einen groben Ablaufplan erstellen, wann was ausgeführt werden soll.
Damit unterteilt ihr das Gesamtproblem in kleine Teilprobleme, die dann sehr schön von einzelnen ausprogrammiert werden können.

Ihr braucht z.B. etwas, dass euch die nächste Frage liefert.
Das umfasst die Frage selber, 4 Antwortmöglichkeiten und welche der Antworten richtig ist.
Delphi-Quellcode:
Frage : string; // Ausgabe
Antwort1, Antwort2, Antwort3, Antwort4 : string; // Ausgabe
Richtig : Integer // Ausgabe
oder (wenn ihr Delphi-Referenz durchsuchenarray schon kennt)
Delphi-Quellcode:
Frage : string; // Ausgabe
Antworten : array[1..4] of string; // Ausgabe
Richtig : Integer // Ausgabe
Schön wäre es jetzt auch, wenn jede Frage pro Runde nur einmal gestellt wird.
Dafür benötigt man die eindeutigen Kennzeichen für jede bislang gestellte Frage und jede Frage muss auch so ein eindeutiges Kennzeichen haben.
Delphi-Quellcode:
GestellteFragenKennzeichen : array of integer; // Eingabe
FrageKennzeichen : Integer; // Ausgabe
Frage : string; // Ausgabe
Antworten : array[1..4] of string; // Ausgabe
Richtig : Integer // Ausgabe
Diese Fragen sollen aus einer Datei gelesen werden, dann wird ja noch der Dateiname benötigt
Delphi-Quellcode:
DateiName : string;
GestellteFragenKennzeichen : array of integer; // Eingabe
FrageKennzeichen : Integer; // Ausgabe
Frage : string; // Ausgabe
Antworten : array[1..4] of string; // Ausgabe
Richtig : Integer // Ausgabe
In Delphi/Pascal (und eingeenglischt ) umgesetzt würde das dann so aussehen:
Delphi-Quellcode:
procedure GetNextQuestion(
  // Eingabe-Argumente
  const FileName : string; // Dateiname mit dem Fragenkatalog
  QuestionIDArr : array of integer; // bereits gestellte Fragen
  // Ausgabe-Argumente
  out QuestionID : Integer; // ausgewählte Frage-ID
  out Question : string; // Fragetext
  out Answers : array[1..4] of string; // Antworten
  CorrectAnswerIndex : Integer // Index der richtigen Antwort (1..4)
);
begin
  // hier kommt der Code
end;
Um nun der Gruppe ein unabhängiges Arbeiten zu ermöglichen, werden diese Teile als Dummys programmiert.
Delphi-Quellcode:
unit Form1;

interface

...

implementation

uses
  ...
  QuestionCatalogue_Dummy;

...

procedure TForm1.Foo( Sender : TObject );
var
  LQuestionID : Integer;
  LQuestion : string;
  LAnswers : array[1..4] of string;
  LCorrectAnswer : Integer;
begin
  
  GetNextQuestion( FQuestionFile, FQuestionArray, LQuestionID, LQuestion, LAnswers, LCorrectAnswer );

end;
Delphi-Quellcode:
unit QuestionCatalogue;

interface

procedure GetNextQuestion(
  // Eingabe-Argumente
  const FileName : string; // Dateiname mit dem Fragenkatalog
  QuestionIDArr : array of integer; // bereits gestellte Fragen
  // Ausgabe-Argumente
  out QuestionID : Integer; // ausgewählte Frage-ID
  out Question : string; // Fragetext
  out Answers : array[1..4] of string; // Antworten
  CorrectAnswerIndex : Integer // Index der richtigen Antwort (1..4)
);

implementation

procedure GetNextQuestion(
  // Eingabe-Argumente
  const FileName : string; // Dateiname mit dem Fragenkatalog
  QuestionIDArr : array of integer; // bereits gestellte Fragen
  // Ausgabe-Argumente
  out QuestionID : Integer; // ausgewählte Frage-ID
  out Question : string; // Fragetext
  out Answers : array[1..4] of string; // Antworten
  CorrectAnswerIndex : Integer // Index der richtigen Antwort (1..4)
);
var
  LIdx : Integer;
begin
  // eindeutige QuestionID ermitteln
  repeat
    QuestionID := Random( 100 ) + 1;
    for LIdx := Low( QuestionIDArr ) to High( QuestionIDArr ) do
      if QuestionID = QuestionIDArr[LIdx] then
        begin
          QuestionID := 0;
          Break;
        end;
  until QuestionID <> 0;

  CorrectAnswerIndex := Random( 4 ) + 1;
  for LIdx := 1 to 4 do
    if LIdx = CorrectsAnswerIndex then
      Answers[LIdx] := 'richtige Antwort'
    else
      Answers[LIdx] := 'falsche Antwort';
end;

end.
Sind alle diese Dummys dann fertig, und mit der Oberfläche verbunden, dann fühlt sich die Oberfläche auch schon lebendig an.

Jetzt kann ein jeder den ihm zugeteilten Part ausprogrammieren und gleich mit der Oberfläche testen.

Zum Schluss werden alle die Dummys gegen die echten Funktionen ersetzt und es sollte ein fertiges Programm herauskommen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat