Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Wer Wird Millionär? Abschlussprojekt Klasse 12 (https://www.delphipraxis.net/172916-wer-wird-millionaer-abschlussprojekt-klasse-12-a.html)

schulprogrammierer 28. Jan 2013 18:32

Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Guten Abend liebe Delphi-Praxis Gemeinde!

Ich gehe in die 12. Klasse auf dem Gymnasium.
In Informatik haben wir seit dem 11. Schuljahr die Programmiersprache Delphi.

Als Abschluss sollen wir selbst ein Programm programmieren. Ich habe mich dafür entschieden, ein "Wer Wird Millionär Spiel" zu programmieren (Nein, ich kann mich jetzt nicht mehr umentscheiden). Das Design steht schonmal, nun habe ich noch einige Fragen offen bezüglich des Programmierens.

Wir haben in den 1 1/2 Schuljahren wirklich nur die nötigsten Grundlagen kennengelernt, also mich als etwas anderes als einen blutigen Anfänger zu bezeichnen wäre übertrieben.


Meine größten Probleme:

1. Wie mache ich das mit Fragen und Antworten?
(Ja, das muss ich so unpräzise formulieren. Ich weiss nicht, auf welchen Komponeten ich es darstellen soll, etc.)
2. Wie bekomme ich es hin, dass der Spieler nach jedem Level eine Stufe aufsteigt und die Fragen schwerer werden (also 50€ -> 100 € -> €200 -> ...)

Nun nützt es mir nichts, wenn ich irgendeinen komplizierten Quelltext vorgeworfen kriege. Dann fällt dem Lehrer gleich auf, dass es nicht von mir ist.
Ich suche also eine möglichst einfache Lösung für meine Probleme!
Wenn das Programm nicht ganz perfekt wird, ist auch halb so wild. ´Nach 1 1/2 Jahren minderwertigem Informatikunterricht reichts nicht zu mehr :?
Danke schonmal im Vorraus für HILFREICHE (!!) Antworten :-)

evilboy 28. Jan 2013 18:49

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
"Nun nützt es mir nichts, wenn ich irgendeinen komplizierten Quelltext vorgeworfen kriege. Dann fällt dem Lehrer gleich auf, dass es nicht von mir ist." – So ist es auch, Hausaufgaben wird hier keiner machen, aber einige Anstöße durchaus.

Fragen und Antworten kannst du in einer INI- oder in einer XML-Datei speichern, aus der diese dann bei Laufzeit geladen werden. Delphi (welche Version verwendest du?) liefert Klassen mit, um INI- und XML-Dateien zu lesen.

Im Programm selbst kannst du die Frage in einem TLabel oder TPanel darstellen, die Antwortmöglichkeiten dann auf TButton.

Die Anzeige der Stufe kannst du auch in einem TLabel oder TPanel darstellen.

DeddyH 28. Jan 2013 18:54

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo und Willkommen in der DP :dp:,

wenn es vorerst nur um die Darstellung geht: ich habe hier mal eben mit Lazarus eine minimale Oberfläche zusammengeklickt. Die Frage sowie "A" bis "D" sind Labels, die Antworten sind Buttons. Wenn die Texte entsprechend kurz gehalten werden, sollte das auch passen, ansonsten muss man ein wenig mit den Einstellungen spielen.

cookie22 28. Jan 2013 19:31

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von evilboy (Beitrag 1201040)
"Nun nützt es mir nichts, wenn ich irgendeinen komplizierten Quelltext vorgeworfen kriege. Dann fällt dem Lehrer gleich auf, dass es nicht von mir ist." – So ist es auch, Hausaufgaben wird hier keiner machen, aber einige Anstöße durchaus.

Fragen und Antworten kannst du in einer INI- oder in einer XML-Datei speichern, aus der diese dann bei Laufzeit geladen werden. Delphi (welche Version verwendest du?) liefert Klassen mit, um INI- und XML-Dateien zu lesen.

Im Programm selbst kannst du die Frage in einem TLabel oder TPanel darstellen, die Antwortmöglichkeiten dann auf TButton.

Die Anzeige der Stufe kannst du auch in einem TLabel oder TPanel darstellen.

Warum denn XML? Ist doch viel zu kompliziert. Mit einer INI-Datei kann man das ja schon einfach umsetzen.

evilboy 29. Jan 2013 02:31

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von cookie22 (Beitrag 1201046)
Warum denn XML? Ist doch viel zu kompliziert. Mit einer INI-Datei kann man das ja schon einfach umsetzen.

Wir machen ein Array und serialisieren es… okay, ich bin verrückt… :)

"2. Wie bekomme ich es hin, dass der Spieler nach jedem Level eine Stufe aufsteigt und die Fragen schwerer werden (also 50€ -> 100 € -> €200 -> ...)" – Werden eigentlich mehrere Fragen auf einer Schwierigkeitsstufe gefordert (die dann evtl. zufällig ausgesucht werden), oder nur eine pro Schwierigkeitsstufe? (Bei der Software-Entwicklung üblich, vor der eigentlichen Entwicklung eine Spezifikation schreiben, damit man weiß, was der Kunde eigentlich will :))

Man kann z.B. eine Variable definieren, die die Schwierigkeitsstufe repräsentiert, und die Schwierigkeitsstufe dann auch in einem TLabel.Caption anzeigen…

Maya 29. Jan 2013 08:20

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von DeddyH (Beitrag 1201041)
Die Frage sowie "A" bis "D" sind Labels, die Antworten sind Buttons. Wenn die Texte entsprechend kurz gehalten werden, sollte das auch passen, ansonsten muss man ein wenig mit den Einstellungen spielen.

Ich musste erst letzte Woche für eine Art Messe auch so ein Spielchen programmieren und habe für die Antworten auch Panels verwendet, da die auch das Ereignis "OnClick" haben. Sehr schön ist auch, dass man dann die Farbe entsprechend ändern kann, also ob richtig (grün) oder falsch (rot).

Datenbankanbindung habt ihr sicherlich nicht bei euch gemacht?

Ansonsten kann man das auch schön mit INIs umsetzen. Für jede Schwierigkeitsstufe eine INI-Datei und darin dann die Fragen sammeln.

Just my two cents. :)

Auch wenn OT: Das mit den minderwertigen Info-Unterricht kenne ich auch noch. :( Das war manchmal ein Spaß ...

Sir Rufo 29. Jan 2013 09:17

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Die Visualisierung ist nur der Zuckerguss, der Ablauf ist aber das Salz in der Suppe.

Man sollte sich also vor der visuellen Ausgestaltung Gedanken über den Ablauf machen.

Mal ganz grob den reinen Spielbetrieb
Code:
Verloren <= Nein
Gewinnstufe <= 0
Wiederhole Bis Verloren oder Gewinnstufe = 15
{
  Frage <= [Frage holen] // eine Funktion, die eine neue Frage beschafft
  [Visualisieren der Frage]
  Antwort <= [Antwort vom Spieler]
  Ist Antwort = Frage.RichtigeAntwort dann
  {
    Gewinnstufe <= Gewinnstufe + 1
  }
  sonst
  {
    Verloren <= Ja
  }
}
Dieses muss noch weiter verfeinert werden z.B. um
- Was soll alles bei "Frage holen" berücksichtigt werden? (doppelte Fragen zulassen, Fragen abhängig von der Gewinnstufe, etc.)

Daraus ergeben sich dann auch die Anforderungen an neue Variablen, die man im Hauptteil benötigt.

Ist dieses Konstrukt fertig, dann kann man auch die Aufgaben verteilen oder eben einzeln lösen und verstrickt sich nicht in Spaghetti-Code ;)

DeddyH 29. Jan 2013 09:19

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
D.h., am Ende hat man dann gesalzene Suppe mit Zuckerguss? :lol:

schulprogrammierer 30. Jan 2013 19:53

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Vielen Dank schonmal für die vielen guten Tipps :):)

Wie mach ich denn das mit der INI-Datei?
Wie erstelle ich sie bzw. wie binde ich sie in den Quelltext ein??

BUG 30. Jan 2013 22:42

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von schulprogrammierer (Beitrag 1201409)
Wie mach ich denn das mit der INI-Datei?
Wie erstelle ich sie bzw. wie binde ich sie in den Quelltext ein??

Hier gibt es ein kurzes Tutorial in der DP. Darin sind auch noch eins im Delphitreff verlinkt.

schulprogrammierer 11. Feb 2013 15:57

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Die Tutorials sind ja gut und schön.
Aber wie müsst ich das in meinem Projekt realisieren?

Erstmal alle Fragen (für jede Schwierigkeitsstufe) in eine INI-Datei packen.
Müssen die Antworten gleich dazu oder in eine extra Datei?

Wie bind ich dann die INI-Dateien in meinen Quelltext ein?

1. Frage holen, wie Sir Rufo bereits in seinem Quelltext geschrieben hat.
Wie mach ich das? LoadFromFile?
2. Antwort vom Spieler
3. Antwort überprüfen (Wie mach ich das mit den Antworten am besten?)

Puke 11. Feb 2013 16:33

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Moin, moin
also ich persöhnlich finde, dass Ini-Dateien für Fragen zu groß dimensioniert sind. Einfacher wär es wenn du die Fragen in txt-Dateien packst und sie daraus in eine Memo lädst und dann zufällig welche aussuchst. Am besten machst du für jede Stufe eine txt-Datei, so brauchst du keine komplizierten Aufrufe:

Meine Vorstellung:
Delphi-Quellcode:
var
level: Integer;
fragenummer: Inetger;
begin
Randomize;
memo.lines.loadfromfile(extractfilepath(paramstr(0))+'dawodiedateiliegen'+inttostr(level)+'.txt');
fragenummer:= random(memo.lines.count);
fragelabel.caption:= memo.lines[fragenummer*5];
panela.caption:= memo.lines[fragenummer*5+1];
panelb.caption:= memo.lines[fragenummer*5+2];
panelc.caption:= memo.lines[fragenummer*5+3];
paneld.caption:= memo.lines[fragenummer*5+4];
end;
Die Txt wäre dann so angeordnet:
Code:
Frage
AntwortA
AntwortB
AntwortC
AntwortD
Richtig
Frage
AntwortA
AntwortB
AntwortC
AntwortD
Richtig
Frage
AntwortA
AntwortB
AntwortC
AntwortD
Richtig
...
Dies ist einfach und glaubwürdig.

Gruß Puke

DeddyH 11. Feb 2013 16:40

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Und was ist daran jetzt einfacher als T(Mem)IniFile?

Puke 11. Feb 2013 16:55

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Wenn er nie Inis hatte?
Warum sollte er es auf einaml können?

DeddyH 11. Feb 2013 17:02

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Weil er die Tutorials durchgearbeitet und hoffentlich ein wenig geübt hat? Mal ein Minibeispiel: angenommen, eine solche Inidatei für eine Schwierigkeitsstufe sähe so aus
Code:
[1]
Frage=Wieviel ist 2*2?
Richtig=4
Falsch1=42
Falsch2=Rembrandt
Falsch3=Hä?
[2]
Frage=Wer führte Regie beim Film "Die Vögel"?
Richtig=Alfred Hitchcock
Falsch1=Woody Allen
Falsch2=Stephen Spielberg
Falsch3=George Lucas
[3]
Frage=3 Dinge braucht der Mann: Feuer, Pfeife, ...
Richtig=Stanwell
Falsch1=Rauchmelder
Falsch2=Feuerlöscher
Falsch3=Dudelsack
Dann kann man daraus ganz einfach eine zufällig gewählte Frage samt Antworten herausholen (der Code ist ganz bewusst nicht optimal, etwas Arbeit soll ja noch bleiben):
Delphi-Quellcode:
procedure TForm1.ReadQuestion(const IniName: string);
var
  Ini: TMemIniFile;
  Sections: TStringlist;
  Question: string;
begin
  Memo1.Lines.Clear;
  Ini := TMemIniFile.Create(IniName);
  try
    Sections := TStringlist.Create;
    try
      Ini.ReadSections(Sections);
      Question := Sections[Random(Sections.Count)];
      Label1.Caption := Ini.ReadString(Question, 'Frage', 'Keine Frage vorhanden, nanu?');
      Memo1.Lines.Add(Ini.ReadString(Question, 'Richtig', ''));
      Memo1.Lines.Add(Ini.ReadString(Question, 'Falsch1', ''));
      Memo1.Lines.Add(Ini.ReadString(Question, 'Falsch2', ''));
      Memo1.Lines.Add(Ini.ReadString(Question, 'Falsch3', ''));
    finally
      Sections.Free;
    end;
  finally
    Ini.Free;
  end;
end;
Danach sollten die Frage in Label1 und alle Antworten in Memo1 stehen. Man muss sich natürlich noch merken, welche die richtige ist, sie zufällig durcheinandermischen etc., aber mir ging es jetzt nur um das Auslesen. Evtl. auftretende Fehler sollten natürlich auch noch behandelt werden.

Puke 11. Feb 2013 17:06

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Ok,
doch ich denke mal nicht, dass "ini.readsections" zum Lehrplan gehört. Und ich kenne meinen Infolehrer, der weiß was kopiert ist. Also geben wir ihm einfach keinen Anlass. Vor allem weil unser Freund das mit dem "Loadfronmfile" schon kannte.

Gruß Puke

DeddyH 11. Feb 2013 17:13

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Und die F1-Taste ist bei den Schulrechnern ausgebaut? Ich verrate ja hier keine streng geheimen Vorgehensweisen, die nur den Eingeweihten aus dem erlauchten Kreis der Joghurt-Ritter vermittelt werden.

Puke 11. Feb 2013 17:29

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Naja,
das Internet ist auf den Schulrechnern auch nicht ausgeschaltet.
Es geht halt darum, dass ich glaube (muss nicht richtig sein) der Lehrer wird sich denken, dass deine Lösung vllt. abgeschrieben sein könnte und meine irgendwie schlechter, dafür aber echter rüberkommt. Soll heißen, dass bei meiner Lösung die Chancen, unentdeckt zu bleiben, ein wenig besser stehen, als bei deiner.

Soll er entscheiden. Deine "einfachere":shock: oder meine "abstrakte":cry: Lösung, uns kann es egal sein.



Gruß Puke.

DeddyH 11. Feb 2013 17:31

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von Puke (Beitrag 1202939)
Soll er entscheiden. Deine "einfachere":shock: oder meine "abstrakte":cry: Lösung, uns kann es egal sein.

So sehe ich das auch. Wenn man sich ein Thema für ein Projekt aussucht, dann muss man auch entscheiden, auf welche Art und Weise man das umsetzen möchte.

schulprogrammierer 11. Feb 2013 18:44

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Sehr schön, dass hier so fleißig diskutiert wird :thumb:

Klar, ich will mir hier ja auch nicht alles vorsagen lassen, oder nen kompletten Quelltext geben lassen. Ich brauch nur ein paar Denkanstöße, um das Projekt zu realisieren. Was anderes lässt mein Wissensstand nicht zu :-D

Ich denke mal, ich werde die txt-Datei nehmen, denn damit hab ich schon gearbeitet (wer nicht?!).

Maya 11. Feb 2013 19:11

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von DeddyH (Beitrag 1202924)
Weil er die Tutorials durchgearbeitet und hoffentlich ein wenig geübt hat? Mal ein Minibeispiel: angenommen, eine solche Inidatei für eine Schwierigkeitsstufe sähe so aus
[...]
Danach sollten die Frage in Label1 und alle Antworten in Memo1 stehen. Man muss sich natürlich noch merken, welche die richtige ist, sie zufällig durcheinandermischen etc., aber mir ging es jetzt nur um das Auslesen. Evtl. auftretende Fehler sollten natürlich auch noch behandelt werden.

Er kann ja mit Random und Randomize einfach eine Zufallszahl ermitteln und auf dem Label/Edit/Panel/Button/whatever kommt dann die richtige Antwort. Auf die anderen dreien (mit If-Then-Else oder Case) kommen dann die falschen Antworten. Sieht auch gleich mehr nach WWM aus. ;) In einer globalen Variable kann sich ja dann gemerkt werden, welche Antwort die richtige war.

Randomize, Ranodm, If-then-Else, Case und globale Variablen waren alles Schulstoff bei mir. :)

cookie22 11. Feb 2013 20:05

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Zitat:

Zitat von Puke (Beitrag 1202925)
Ok,
doch ich denke mal nicht, dass "ini.readsections" zum Lehrplan gehört. Und ich kenne meinen Infolehrer, der weiß was kopiert ist. Also geben wir ihm einfach keinen Anlass. Vor allem weil unser Freund das mit dem "Loadfronmfile" schon kannte.

Gruß Puke

Die meisten Informatiklehrer wissen meiner Erfahrung nach recht wenig. ;)

An Ini-Dateien ist nun wirklich nichts besonderes dran, dass kann jeder Anfänger in 5 Minuten im Internet lernen.

Spectre 11. Feb 2013 22:13

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab dir mal aus spass ein beispiel programm angehängt welches ne frage-antwort simulation bei "wer wird millionär" darstellt.
basiert ganz simple auf images welche keine bilder enthalten. wenn du drauf klickst (bei der jeweiligen antwort) werden ereignisse hervorgerufen (antwort falsch etc), bis hin zum nächsten level.

demonstriert ganz simpel wie du die fragen und level auf einfache art und weise darstellen kannst.
geht 100% besser - aber es ist ne einfache art und weise und funktioniert - vielleicht genau das richtige für dich.

sourcecode und .exe sind enthalten.


lg aus hamburg

robin

Puke 12. Feb 2013 08:21

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Guten Tag allerseits,

Zitat:

Zitat von cookie22 (Beitrag 1202972)
Die meisten Informatiklehrer wissen meiner Erfahrung nach recht wenig. ;)

da kennst du meinen nicht! Auf unserer Schule haben wir zwei Informatiklehrer! Beide haben verschiedene Spezialgebiete. Leider habe ich den erwischt der sich mit dem Internet:(, seiner Enwicklung, dem Aufbau und allem sonstigen drum und dran sehr gut auskennt. Mal so ne kleine Geschichte von ihm (sollte ein Witz von ihm werden:?):

Zitat:

Bei meiner letzten Klausur hat jmd. ne Arbeit mit Delphi abgegeben. Hab ihm ne 0 gegeben. Grund: Hat die Quellen nicht angegeben!
Ich wette der Typ hat genauso wenig gelacht wie wir, als er seine Arbeit zurückbekommen hat. Da hilft nur Tipps annehmen, den einfachsten Weg wählen und möglichst irgendwas schreiben, was den selben Sinn wie unseres hat, doch unser geliebtes Google nicht findet!:thumb:

@Spectre: Grafik ist natürlich auch wichtig. Erster Eindruck und so, doch dein Prinzip hinkt dem Ini-File und dem Txt-File Teil "etwas" zurück. Er braucht min. 50 Fragen und Antworten pro Stufe, damit die Wahrscheinlichkeit ziemlich niedrig ist, dass in zwei Spielen hintereinander dieselben Fragen in einer Stufe kommen.

Nimm die Grafik von Spectre und hau statt den Images Labels drauf. Die sind einfacher zu beschriften.

Gruß Robin.

Spectre 12. Feb 2013 19:49

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
du heisst auch robin? o.O

ach was die grafik hab ich so hingeschustert...wenn bedarf ist kann ich das ordentlich machen mit photoshop :P
joa hast recht...die image variante hab ich früher immer benutzt um eigene button zu basteln mit hover effecten, geht damit ganz gut :P

schulprogrammierer 20. Feb 2013 17:26

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Delphi-Quellcode:
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
var Fragenummer:integer;
    Level:integer;
begin
Randomize;
Memo1.Lines.LoadFromFile('H:\Delphi\Klasse 12\Abschlussprojekt/'+'Fragen/'+'Fragen.txt');
Fragenummer:= random(Memo1.Lines.Count);
Frage.Caption:= Memo1.Lines[0];
AntwortA.Caption:= Memo1.Lines[1];
AntwortB.Caption:= Memo1.Lines[2];
AntwortC.Caption:= Memo1.Lines[3];
AntwortD.Caption:= Memo1.Lines[4];
end;
Hier mal mein Fortschritt (ich weiss, noch nicht besonders viel, aber mühsam ernährt sich das Eichhörnchen :-D)
Hier ist das Problem, wie wähl ich andere Fragen aus.
Meine txt. Datei ist folgendermaßen angeordnet:

Code:
Das Wandern ist des Müllers ... ?
Frust
Lust
Freude
Spaß
Eine Pauschalreise kann man ... ?
buchen
pappeln
eichen
weiden
Also wie krieg ich es hin, dass bei der Fragenauswahl nicht immer nur die erste Frage, sondern auch mal die zweite dran kommt?


2. Frage: Wie realisier ich den Spielablauf am besten?

Ich hab mir gedacht, dies lässt sich doch ganz gut mit if .. then .. else machen.
Zunächst eine Wederholschleife (wiederhole bis verloren oder level 15)
Dann die Routine, die die Frage holt (siehe oben)
Dann müsste ja rein theoretisch eine Antwort vom Spieler kommen ?!
dann wieder if Antwort=richtige Antwort then..

Wie überprüf ich ob die Antwort die richtige ist?

und dann noch if richtig then Level +1.

DeddyH 20. Feb 2013 17:30

AW: Wer Wird Millionär? Abschlussprojekt Klasse 12
 
Hatten wir alles schon samt Beispielsourcen. Also entweder Beratungsresistenz aufgeben oder selber Gedanken machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 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