Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   In click (https://www.delphipraxis.net/191539-click.html)

MrRocTaX 25. Jan 2017 22:12

In click
 
Hallo,

Ich habe die Aufgabe ein Programm im Informatik Unterricht zu programmieren, dazu habe ich als Vorlage das Spiel reigns genommen. Kurzform: da gibt es ein Text und 2 Reaktionen darauf welche sich auf deine Stats auswirken. Diese beiden Knöpfe wollte ich zwar einbauen aber den Programmtext eigentlich hauptsächlich in das TForm schreiben da ich lediglich will das beim klicken eines Button sich die stats ändern und eine neue Frage bzw. Situation erzeugt , da die ganzen Situationen jedoch zufällig sein sollen also zufällig ausgewähl wollte ich das alles in das TForm reinpacken kann mir jemand erklären wie ich das am besten mache ? Oder Anregungen für andere Herangehensweisen ? Falls jemand das nicht ganz verstanden hat kann ich das nochmal genauer erläutern

MFG MrRocTaX

a.def 25. Jan 2017 22:19

AW: In click
 
Willkommen.
Nicht böse sein. Aber kannst du dein Problem noch einmal etwas genauer und verständlicher schildern?
Ändere auch den Thread-Titel ab denn der ist definitiv nichts-sagend.

Whookie 25. Jan 2017 23:33

AW: In click
 
Du könntest dir eine Basisklasse für deine Fragen erstellen:

Delphi-Quellcode:
TQuestion = Class
private
  fId: Integer;
  fText: String;
  fYesId: Integer;
  fNoId: Integer;
  ...
public
  construcor create(AId: Integer; const AText: String; YesID, NoID: Integer);
end;
Hier könnten dann auch weitere Daten abgelegt werden (etwa Erfahrungspunkte die man für eine Antwort bekommt, oder Geld, usw...
Natürlich könnten dann auch weiter Klassen abgeleitet werden die nicht nur ja/nein als Antwort bedingen...

Dann benötigst du eine Liste mit der du deine Geschichte verwalten kannst. Mit einem aktuellen Delphi etwa

Delphi-Quellcode:
fStory: TObjectList<TQuestion>
TList geht natürlich auch, dann muss die Objektverwaltung selbst gemacht werden.

Die Geschichte baust du dann z.B. im FormCreate deiner Mainform auf:

Delphi-Quellcode:
begin
  fStory := TObjectList<TQuestion>.Create;
  fStory.Add(TQuestion.Create(1, 'Das Auto bremst kurz ab und du hast die Gelegenheit herauszuspringen. Wagst du es?', 2,3));
  fStory.Add(TQuestion.Create(2, 'Gerade so geschafft, das Fahrzeug reißt aus und kracht gegen eine Mauer. Gehst du hin und siehst nach ob jemand überlebt hat?', 3, 4));
  fStory.Add(TQuestion.Create(3, 'Sorry du bist tod!, -1, -1));
  ...
Natürlich muss TQuestion einen passenden Constructor dafür haben.

Das eigentliche Spiel beginnt immer mit Item 0 deiner Story. Du zeigst den Text an und der Anwender kann dann mit Ja oder Nein antworten. Entsprechend seiner Wahl nimmst du dann die fYesId oder fNoId und durchsuchst die Liste nach dieser fId. Das ensprechende Item enthält dann die nächste Frage (oder beendet die Geschichte).

freimatz 26. Jan 2017 07:27

AW: In click
 
Zitat:

Zitat von MrRocTaX (Beitrag 1359976)
... Diese beiden Knöpfe wollte ich zwar einbauen aber den Programmtext eigentlich hauptsächlich in das TForm schreiben da ich lediglich will das beim klicken eines Button sich die stats ändern und eine neue Frage bzw. Situation erzeugt , da die ganzen Situationen jedoch zufällig sein sollen also zufällig ausgewähl wollte ich das alles in das TForm reinpacken kann mir jemand erklären wie ich das am besten mache ? Oder Anregungen für andere Herangehensweisen ? Falls jemand das nicht ganz verstanden hat kann ich das nochmal genauer erläutern

Hm, vielleicht nicht genauer sondern vielleicht erst mal in richtigereren deutsch? Wenn ihr schon Informatik in der schule habt, solltest du doch einige Jahre Deutsch hinter dir haben. Ein ordentlicher Aufbau mit Hautsatz und Nebensatz und richtiger Zeichensatzung hilft beim Verstehen ungemein. ;-)

Daniel 26. Jan 2017 07:43

AW: In click
 
Zitat:

Zitat von freimatz (Beitrag 1359991)
Hm, vielleicht nicht genauer sondern vielleicht erst mal in richtigereren deutsch? Wenn ihr schon Informatik in der schule habt, solltest du doch einige Jahre Deutsch hinter dir haben.

Wir wissen nichts über den jeweiligen Hintergrund der anderen Foren-Teilnehmer. Und so sehr auch ich mich über vollständige und korrekte Sätze freue, werden wir dennoch niemanden dafür verurteilen, wenn er (oder sie) das mit der Sprache mit so ganz packt. Wir können hier in der Online-Welt nicht zwischen Schludrigkeit und Unvermögen unterscheiden und sollten daher stets im "Zweifel für den Angeklagten" sein.
Wenn es Dich abhält, konstruktiv zu dem Problem beizutragen, ist das nur okay. Aber eine Diskussion im Sinne von "Lern erstmal Deutsch" wollen und werden wir hier nicht beginnen.

Sherlock 26. Jan 2017 09:12

AW: In click
 
Was ist eigentlich ein Hautsatz? Glashaus, Steine...

Sherlock

a.def 26. Jan 2017 12:09

AW: In click
 
Ich fasse mal zusammen was ich verstanden habe. Vielleicht habe ich es ja total falsch verstanden aber PC-Spiele und deren Logik ist nicht mein Gebiet:

- das Formular soll drei TLabel besitzen
- das Formulöar soll zwei TButton besitzen

Zwei Labels zeigen Texte an wie ... "Kraft: 5" oder "Unbesiegbarkeit: 2" oder was auch immer.
Ein Klick auf einen Button soll nun "Kraft: 5" in "Kraft: (random-Wert)" ändern.

Dann gibt es noch eine zufällige Frage, welche ebenfalls in einem Label angezeigt wird.
Mit Klick auf den zweiten Button (?) soll eine zufällige Frage aus einem Pool gefischt und in diesem Label angezeigt werden.

p80286 26. Jan 2017 13:13

AW: In click
 
Mich erinnert das an alte Dosen-Zeiten.
bei verschiedenen Fragen konntest Du antworten was Du wolltest aber bei zweimal "links" oder "rechts" hintereinander bist Du hinaus gepflogen.

Gruß
K-H

MrRocTaX 26. Jan 2017 21:19

AW: In click
 
Soo also tut mir erstmal leid für meine Rechtschreibung, sowie für die schlechte Schilderung des Themas. Ich schreibe das Alles über das Handy und da ist es oftmals nicht so einfach auf Rechtschreibung zu achten, wobei es ja auch einige so geschafft haben. Es war halt spät abends und ich wollte lediglich erkunden ob das hier ein Forum ist wo ich solche Hilfe bekomme oder nur eins für fortgeschrittene etc. Da ihr mir ja fast alle sehr hilfsbereit geantwortet habt will ich euch das Problem nochmal genauer erläutern und hoffe auf weitere Anregungen und Hilfe. Zuvor will ich jedoch anmerken, dass ich ein relativer Laie in Delphi 7 bin, ich komme ganz gut zurecht mit Logik aber die ganze Syntax ist mir nicht so geläufig.

MrRocTaX 26. Jan 2017 21:25

AW: In click
 
Also, meine Idee war ein memo Feld in der eine Situation beschrieben ist, links und rechts davon sind zwei weitere in der die möglichen antworten stehen. Nun soll man auf ein button unter jenen klicken und somit diese Antwort auswählen darauf hin soll sich eine Zahl die über den ganzen steht ( insgesamt 4 Zahlen also ggf. Auch mehrere) ändern. Dann soll die nächste Situation kommen und alles soll sich beim button click automatisch ändern. Welche Situation erzeugt wird soll jedoch zufällig geschehen, es soll eine aus einem bestimmten pool von Situationen genommen werden.(wie ich diese zufällige Auswahl gestalte ist mir auch noch nicht ganz in den Sinn gekommen) Ich freue mich auf jeden Fall, dass ihr mir helfen wollt und hoffe ich habe das etwas besser geschildert. Bei weiteren fragen fragt ruhig

MFG MrRocTaX
PS: wie ändere ich den Titel ?

a.def 26. Jan 2017 21:28

AW: In click
 
Jetzt bin ich noch verwirrter. Oben dachte ich erst ich habe es verstanden. Aber was du gerade geschrieben ist deckt sich irgendwie gar nicht mit dem was du im ersten Post geschrieben hast.
Kannst du nicht einen PC benutzen und dort schreiben, ggf. sogar Skizzen, Ideen anhängen?

MrRocTaX 26. Jan 2017 21:29

AW: In click
 
@Whookie also ich bin ein Anfänger deswegen verstehe ich deinen Quelltext noch nicht ganz es wäre toll wenn du so die einzelnen Elemente erklären könntest, mir wurde nur das grundlegende bei gebracht und das was ich mit logischen Menschenverstand erschließen kann.

MrRocTaX 26. Jan 2017 21:33

AW: In click
 
Heute abend nicht mehr aber morgen habe ich Zeit. Es soll ein Szenario beschrieben werden , dann wird darauf hin dem Spieler zwei Auswahlmöglichkeiten gegeben, diese beeinflusst dann 4 anzeigen max. (mind.1) und wenn eine voll oder leer ist (max 100 ,min. 0) dann hat er verloren. Oder einfach ein kurzes Video zu dem Spiel Reigns anschauen.

p80286 26. Jan 2017 21:54

AW: In click
 
ich hab da was gefunden:http://nerdbench.com/2016/08/review-reigns.html
Ich glaube ich hab's jetzt verstanden.
Dir wird eine Karte präsentiert. Die Aktion darauf kann der Spieler annehmen oder Ablehnen. Dadurch werde vier Punktelevel beeinflußt. Wenn ein Level auf Null gefallen ist, ist das Spiel vorüber.

Das scheint mir der grobe Ablauf zu sein.

Gruß
K-H

a.def 26. Jan 2017 21:56

AW: In click
 
Klingt relativ kompliziert. Ob das für einen Anfänger oder "Laien" wie er sich selber bezeichnet wirklich geeignet ist?

MrRocTaX 27. Jan 2017 10:32

AW: In click
 
Naja also ich habe mir dazu ein Gedankenkonstrukt erstellt, wollte jetzt nur Hilfe bei meinen zwei Problemen haben einmal wie man aus einer beliebigen Anzahl von Situationen eine zufällige nehmen kann und wie man in einen anderen Programm Text das drücken eines Buttons mit einbauen kann, da ich ja zwei Buttons benutzen möchte aber ich nicht beides seperat programmieren möchte obwohl das auch möglich wäre.

a.def 27. Jan 2017 10:37

AW: In click
 
Irgendwie verstehe ich noch immer nur die Hälfte.

Du sagtest selber, du bist Laie. Deswegen würde ich auch solchen Code verwenden.
Benutze ein Array und schreibe dort Hard-Coded deine Situationen rein. Mit Random() kann du dann eine zufällige Situation auswählen.
Ich würde hier nicht super-kompliziert mit Klassen usw arbeiten. Das glaubt dir dein Lehrer dann eh nicht, dass du das geschrieben hast.

Das mit dem Text und Button verstehe ich nicht. Du schreibst viel zu kompliziert. Setze dich doch bitte an den PC und schicke deine Skizzen, Ideen, schreibe alles vernünftig auf usw. :|

Jumpy 27. Jan 2017 11:02

AW: In click
 
Bei einem Szenario musst du mMn folgende Dinge speichern:
-ID oder Nummer
-Frage
-Antwort_A
-Antwort_B
-Stat1_A //Veränderung des Statusses im Bereich 1, wenn Lösung A gewählt usw.
-Stat2_A
-Stat3_A
-Stat4_A
-Stat1_B
-Stat2_B
-Stat3_B
-Stat4_B

Idealerweise würde man dazu wohl eine Datenbank wählen, aber man könnte es auch Dateibasiert z.B. in einer Textdatei/Inidatei/XMLDatei oder ähnliches machen. Dann müsste man sich nur überlegen, ob man pro Szenario eine Datei macht, die dann z.B. die ID/Nr als Dateinamen hätte oder ob man alle in eine Datei packt.
Wenn man z.B eine Ini-Datei zum speichern nähme und vereinbart, dass in den Fragen und Antworten keine Zeilenumbrüche drinne wären könnte man die ID/Nr als Sektion der Ini-Datei nehmen und eine Frage sähe dann ggf. so aus:
Code:
[17]
Frage=Ein Mann kauft ein Auto, was hälst du davon?
Antwort_A=Männer sollten keine Autos kaufen
Antwort_B=Warum hat er mir keins mitgebracht
Stat1_A=-1
Stat2_A=-3
Stat3_A=4
Stat4_A=2
Stat1_B=1
Stat2_B=2
Stat3_B=-1
Stat4_B=-3
Ist natürlich eigentlich ein bißchen das Pferd von hinten aufgezäumt, wenn ich hier direkt mit dem Speichern der Daten anfange, und im professionellen Entwickeln würde man das anders herum machen, aber für eine Anfänger-Schulaufgabe finde ich das OK.
Wie man die Daten dann in Objekten verpackt, wurde ja schon ansatzweise vorgestellt.


Zum Vorgehen im Programm:
-Du brauchst Variablen, um deine 4 Stati zu speichern.
-Du brauchst eine Liste, wo bereits gestellte Fragen (deren ID) gespeichert werden, damit die Frage nicht nochmal gestellt wird.
-Du brauchst eine Prozedur, die eine neue Frage lädt. Diese wird ausgesucht, in dem eine Zufallszahl (mit Random) solange ermittelt wird, bis eine gefunden wurde, die noch nicht in der Liste der gestellten Fragen steht. Dann wird diese Frage aus der oben genannten Datenbank oder Datei "irgendwie" geladen. Idealerweise in ein Objekt für die Datenhaltung und in die Memo-Felder für die Anzeige. Nicht vergessen, die Frage auch in die Liste einzutragen.
-Beiden Buttons wird die selbe Button-Click-Prozedur zugewiesen, die z.B. über die Tag-Eigenschaft der Buttons zw. Antwort A/B unterscheiden kann. Je nach Antwort werden die Stats angepasst. Neu angezeigt. Geprüft ob Programm zu Ende ist und entweder eine neue Frage geladen oder "Programm zu Ende"-Meldung ausgegeben.
-Dafür brauchst du eine Prozedur, die die angepassten Stats im Formular anzeigt(aktualisiert).
-Eine Prozedur, die checkt ob Programm zu Ende.
-...

a.def 27. Jan 2017 11:06

AW: In click
 
Wäre ich in der Lage des Themenerstellers würde ich jetzt sagen "Game Over - Projekt gelöscht" :cyclops:
Was ich sagen will... ich glaube euer Lehrer verlangt hier viel zu viel. Ihr kennt wahrscheinlich noch nicht einmal die Grundlagen, sollt aber ein "Spiel" programmieren.
Klar, durch Herumprobieren lernt man auch. Aber das hier wäre ein bisschen zuviel Herumprobieren.

p80286 27. Jan 2017 20:39

AW: In click
 
@a.def
Warum so negativ? Meiner Meinung nach fehlt hier das Konzept (pap), das dann die Oberfläche bedingt. Nicht umgekehrt, die Oberfläche bestimmt das Programm.

Wenn Du allerdings der Meinung bist, daß ein Spiel, das über die Komplexität von Mastermind hinaus geht, für Anfänger etwas zu komplex ist, bin ich geneigt, Dir zuzustimmen.

Gruß
K-H

MrRocTaX 29. Jan 2017 20:06

AW: In click
 
Erstmal Danke für die hilfreichen Antworten, ich war dieses Wochenende nicht zuhause weshalb ich nicht in der Lage war noch etwas dazu zu kommentieren.
Ich bin offen für Herausforderungen und werde auf jeden Fall eure Ideen mal versuchen in die Tat umzusetzen. da muss ich nur noch mal gucken wie man das mit array macht :D

Whookie 30. Jan 2017 12:26

AW: In click
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da du für die Fragen offensichtlich keinen "Handlungsverlauf" benötigst wird das Ganze noch einfacher. Das simple Beispiel sollte reichen um Loslegen zu können. Wieviele Eigenschaften du brauchst (ich habe mal einfach StatA + StatB angenommen) liegt ganz bei dir und musst du dann auch entsprechend umsetzten. Natürlich "stirbt" man dann auch noch an geeigneter Stelle, usw...

Ein wirklich guter Hinweis kam auch noch in #18 (statt direkt im Quellcode, erstellst Du deine Ereignisse z.B. in einer Textdatei und lädst sie beim Programmstart). Hier gehts aber mal ganz einfach um Ja/Nein und zufällig ausgewählte Fragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz