![]() |
Re: Schulprojekt: Spiel "Domino" programmieren!
Wir haben einmal wie vorgeschlagen Brainstorming betrieben!:) Unser Ergebnis:
Objekte: Dominosteine sind z.B. Bilder, 2 feste Variablen zugeordnet, stehen für die zwei Augenzahlen, 2 Spieler, die noch verfügbaren Steine des Spielers der an der Reihe ist werden angezeigt, Stapel der übrigen Steine, die man ziehen muss, wenn man nicht kann (->müssen verdeckt sein), Aktuelle Endsteine der Reihe oder Komplette Reihe muss angezeigt werden, Endsteine müssen immer aktualisiert werden (falls man nur die Endsteine anzeigen lässt, da diese ja nur von Bedeutung sind) Eingabe: Vor dem Spiel wird abgefragt die Spieleranzahl (zunächst 2, später mehrere Möglichkeiten), Spielernamen und die Anzahl der Steine (4-er Domino, 6er-Domino, etc.,-> entspricht Spieldauer), während des Spiels muss ein Stein ausgewählt werden (entweder darauf klicken, oder Radio Button o. Ä.) Logik: 1) Mindestens eine Variable des ausgewählten Steins muss mit mindestens einer Variablen eines aktuellen Steines übereinstimmen, bei mehreren Anlegemöglichkeiten muss noch das genaue „Ziel“ gewählt werden. 2) man klickt auf eine Hälfte eines Steines und dann auf die Hälfte an der er angelegt werden soll, oder durch ziehen falls möglich, wenn die Variablen übereinstimmen, soll der Stein angelegt werden, wenn nicht, kurze Fehlermeldung. Das eigentliche testen kann durch einfache Abfrage geklärt werden:„ if x1 = x2 do […Prozedur „Steinanlegen“…] else showmessage(‚Der ausgewählte Stein passt hier nicht hin!’) Hierbei wären x1 und x2 jetzt die Variablen der zwei Hälften (=Augenzahl). Variante 2) erscheint sinnvoller... Der Spielzug ist zuende.. 1. nach erfolgreichem Anlegen, 2. nach Ziehen eines Steines wenn man nicht anlegen konnte oder 3. wenn der Spieler aussetzen muss, da 1. und 2. nicht erfüllt werden konnten. Ausgabe: Noch unklar… Fragen: „Wie kann ich einem Objekt (Dominostein) zwei Feste Werte zuordnen, die vom Programm abgefragt werden können?“ Oder (falls man jede Hälfte einzeln betrachtet siehe Logik 2): „Wie kann ich einem Objekt (Dominosteinhälfte) einen festen Wert zuordnen, der seiner Augenzahl entspricht? Und wie erreiche ich, dass zwei Hälften dann immer zusammengehören, d.h., dass wenn ich die eine Hälfte anlege, die andere Hälfte die aktuelle Augenzahl ist, an die angelegt werden muss?“ Ich hoffe ihr versteht was ich meine :mrgreen: |
Re: Schulprojekt: Spiel "Domino" programmieren!
Zitat:
dabei kann dir die erste variable die dominosteinnummer angeben(von 1 bis x) und dazugehörig die zwei einträge für die wertehälften. also so, dass jeder stein eine nummer hat und unter dieser nummer die beiden werte abgespeichert sind. beim anlegen kannst du dann prüfen ob dominonummer1.wert1 = liegenderstein.wert2 und dominonummer1.wert2 = liegenderstein.wert2 wenn wert1 passt, dann soll er den stein setzen. wenn wert2 passt, dann soll er wert1 und wert2 des steins tauschen und dann setzen. |
Re: Schulprojekt: Spiel "Domino" programmieren!
Zitat:
Objekt "Dominostein" benötigt folgende Eigenschaften: - Wert1 : zahl - Wert2 : zahl Objekt "Stapel" benötigt folgende Eigenschaften: - Liste mit "Dominostein" - Oberster Stein : "Dominostein" Objekt "Spieler" benötigt folgende Eigenschaften: - Name : text - Liste mit "Dominostein" (Steine des Spielers) Objekt "Spielfeld" benötigt folgende Eigenschaften: - Liste mit "Dominostein" (alle Steine auf dem Spielfeld) - Erster Stein : "Dominostein" - Letzter Stein : "Dominostein" Objekt "Spiel" benötigt folgende Eigenschaften: - Liste mit "Dominostein" (alle Steine) - Liste mit "Spieler" (alle Spieler) - Aktueller Spieler : "Spieler" - Der Stapel : "Stapel" - Das Spielfeld : "Spielfeld" so sieht der Anfang eigentlich aus (ist nicht komplett) aber so solltet ihr das aufschreiben. Das Ganze spielt man dann so durch: - Ich habe Zugang zum Spiel. - Dadurch weiß ich, wer dran ist (Aktueller Spieler) - Dadurch weiß ich, welche Steine dieser Spieler hat (Aktueller Spieler->Liste mit "Dominostein" usw. |
Re: Schulprojekt: Spiel "Domino" programmieren!
Mal eine allgemeine Frage, da jetzt hier schon einige objekt-orientierte Vorschläge gekommen sind.
Habt ihr diese überhaupt behandelt? Weil wenn ich so deine Fragen lese sieht das eher so aus, als wäre dies nicht der Fall gewesen. Und wenn ich an meine Schulzeit zurück denke, muss ich sagen, dass war bei uns auch nicht der Fall. Unser Infolehrer hatte gar keinen Plan von OOP, dass durfte ich ihm dann mal so ansatzweise erklären, wie das funktioniert. |
Re: Schulprojekt: Spiel "Domino" programmieren!
Grundlagen kann man sich aneignen. Ein Entwurf mit Objekten ist einfacher als mit Records und Pointern zu arbeiten. Auf jeden Fall sollte man das ganze Spiel erst einmal funktionstüchtig entwerfen, bevor man sich mit der Darstellung beschäftigt. Sonst bekommt man ganz schnell Probleme.
Die Spielklasse sollte z.B. mit Datenobjekten jede Spielsituation darstellen können (nicht zu verwechseln mit Bildschirmanzeige). Jede Änderung der Spielsituation sollte über geeignete Methoden erfolgen. Mal so ein kleiner Entwurf:
Delphi-Quellcode:
TStein = class
constructor Create(AZahl1, AZahl2: Integer); private FZahl1: Integer; FZahl2: Integer; public property Zahl1: Integer read FZahl1; property Zahl2: Integer read FZahl2; end; TSpieler = class constructor Create(AName: string); private FName: string; FSteine: TList; {TStein - alle Steine die der Spieler in der Hand hält} public property Name: string read FName; property Steine: TList read FSteine; end; TSteinPos = class constructor Create(AStein: TStein; APos: TRect); private FStein: TStein; FPos: TRect; public property Stein: TStein read FStein; property Pos: TRect read FPos; end; TDomino = class constructor Create(); private FSteine: TObjectList; {enthält TStein - alle Steine die im Spiel vorkommen} FStapel: TList; {enthält TStein - alle Steine gemischt, die auf dem Stapel zum Ziehen liegen} FSpieler: TObjectList; {enthält TSpieler - alle am Spiel beteiligten Spieler} FReihe: TObjectList; {enthält TSteinPos - alle gesetzten Steine mit Pos} FAmZug: TSpieler; {Spieler der aktuell am Zug ist} public property Reihe: TObjectList read FReihe; property Spieler: TObjectList read FSpieler; property AmZug: TSpieler read FAmZug; procedure Spielstarten; function Zug(AStein: TStein; APos: TRect): Boolean; end; |
Re: Schulprojekt: Spiel "Domino" programmieren!
Zitat:
Muss ich für jeden Dominostein die zwei Werte festlegen, in etwa so:
Delphi-Quellcode:
oder wie mache ich das am Besten? Mit dem Array habe ich mich auch ein bisschen befasst, doch das bereitet mir noch Probleme. Denn wenn ich jetzt z.B. habe Dominostein[1,2], dann kann kann ich damit ja nur einen Wert auslesen, bzw speichern in der Zelle der 1. Spalte und 2. Zeile! Bräuchte ich ein Dreidimensionales Array oder wie?
type TDominostein = record
Wert1 : integer; Wert2 : integer; end; Zu Sir Rufo habe ich folgendes einmal aufgeschrieben:
Delphi-Quellcode:
Kann ich irgendetwas davon gebrauchen? Ansonsten habe ich nicht ganz verstanden, wo jetzt mein nächster Schritt liegen soll, außer aufzuschreiben, welche Eigenschaften verschiedene Objekte haben sollen..
type TDominostein = record
Wert1 : integer; Wert2 : integer; {Zwei verschiedenen Werte für Augenzahlen} end; type TSpieler = record Name : String; {HandDomino : array of TDominosteine} end; type TSpielfeld = record ErsterStein : TDominostein; LetzterStein : TDominostein; { ZiehDomino : array of TDominostein} end; type TSpiel = record { AlleDomino : array of TDominostein} { AlleSpieler : array of TSpieler} AktSpieler : TSpieler; { und so weiter...) end; Zu hugo1990: Also uns wurde der Begriff erst Bei der Java-Programmierung erläutert. Ich weiß nicht in wiefern wir bis dahin in Delphi objekt-orientiert gearbeitet haben. Ich dürfte doch jetzt auch einmal behaupten, dass unser Info Lehrer auch nicht das Superhirn ist.. Zu Blup: Damit kann ich bisher leider recht wenig anfangen :? Ich versuche das zu verstehen, ich glaube das ist soetwas ähnliches wie meine Record-Deklarationen oben oder? Könntest du vielleicht einmal kurz erläutern was das genau bedeutet? Das wäre nett... An Alle: Jetzt schon habe ich ganz viele verschiedene Herangehensweisen vorgeschlagen bekommen, doch ich müsste mich wirklich für eine entscheiden^^ Vielleicht könnte sich ja jeder einmal die Vorschläge der anderen durchlesen und diese Kommentieren. Aber wir können auch gerne noch etwas warten und erstmal sammeln :) Kanns zwar kaum erwarten mit dem Programmieren anzufangen, aber "Abgabetermin" ist wirklcih noch hin! Großes Dankeschön soweit schonmal an alle und bis dann! |
Re: Schulprojekt: Spiel "Domino" programmieren!
Delphi-Quellcode:
Mit dieser "Kombination" aus Dem Record und Array ist es mir gelungen, 10 verschiedenen Dominosteinen 2 Werte zuzuordnen. Also eigentlich genau das was ich wollte oder? :-D Nunja in Wirklichkeit hat man natürlich mehr Steine, aber für den Anfang reicht das. Das Abfragen der Werte habe ich auch getestet, indem man "k" eingegeben hat, also die Nummer des Dominosteins, und es wurde der passende Wert1 des Steines ausgegeben. Mit dem Wert2 funktioniert das genauso! type TDominostein = record Wert1 : integer; Wert2 : integer; {Zwei verschiedenen Werte für Augenzahlen} end; {Im echten Quelltext steht hier noch was..} procedure TForm1.Button1Click(Sender: TObject); var Dom : array[1..10] of TDominostein; begin Dom[1].Wert1:= 0; Dom[1].Wert2:= 0; Dom[2].Wert1:= 1; Dom[2].Wert2:= 0; Dom[3].Wert1:= 1; Dom[3].Wert2:= 1; Dom[4].Wert1:= 2; Dom[4].Wert2:= 0; Dom[5].Wert1:= 2; Dom[5].Wert2:= 1; Dom[6].Wert1:= 2; Dom[6].Wert2:= 2; Dom[7].Wert1:= 3; Dom[7].Wert2:= 0; Dom[8].Wert1:= 3; Dom[8].Wert2:= 1; Dom[9].Wert1:= 3; Dom[9].Wert2:= 2; Dom[10].Wert1:= 3; Dom[10].Wert2:= 3; k := StrToInt(edit1.text); if k>10 then edit2.text := 'Bitte nur Zahlen von 1 bis 10 eintragen!' else if k<1 then edit2.text := 'Bitte nur Zahlen von 1 bis 10 eintragen!' else edit2.text := 'Wert1 vom Dominostein '+ IntToStr(k) +' beträgt '+ IntToStr(Dom[k].Wert1); end; Also wenn ich jetzt noch so andere Dinge wüsste, z.B. wie das mit dem Anlegen klappen soll undso, dann bin ich guter Dinge :mrgreen: Genug für heute! Bis morgen ;-) |
Re: Schulprojekt: Spiel "Domino" programmieren!
Ich würde mir überlegen aus derm Record eine Klasse zu machen.
|
Re: Schulprojekt: Spiel "Domino" programmieren!
@Blub:
Natürlich kann man sich Grundlagen aneignen. Aber wenn man einfach etwas an den Kopf geworfen bekommt, was man noch nie gesehen hat und auch nicht weiß, was es ist, kann man damit auch recht wenig anfangen. Und die Reaktion von He4dnut zeigt ja, dass er damit nichts anfangen kann. Und ich finde auch, dass man sich nicht unbedingt noch neue Sachen aneignen sollte um ein Projekt für die Schule zu schreiben. Weil die Zeit für das Projekt ist ja begrenzt und wenn man nicht abschätzen kann, wie lange man brauchen wir, eh man das ganze verstanden hat, ist das blöd. Weil man dann dafür womöglich ne ganze Menge Zeit verbrät und im Endeffekt nicht mehr genügend Zeit hat das Projekt fertig zu stellen. Und bei so einem Projekt ist es ja auch wichtig, dass es nicht nur Funktioniert, sondern man auch verstanden hat, was man da gemacht hat. Weil wenn man Sachen verwendet, die man Unterricht nicht behandelt hat, dann darf man das meistens auch erklären und wenn man dann keine richtige Ahnung hat, wird der Lehrer skeptisch ob man es wirklich selber gemacht hat. Wie gesagt, ich durfte das damals bei meinem Infolehrer machen, aber ich kannte mich aber auch bereits bevor ich Info hatte, mit der OOP aus. Also es ist deine Entscheidung, was du machen willst und wie du es im Endeffekt lösen möchtest. Mit Records ist das aber auch ohne Probleme zu lösen. Mit der OOP kann man zwar viele Sachen einfacher und eleganter lösen, aber wenn man sich halt erst noch in die OOP einarbeiten muss, dann dauert es halt auch erstmal, eh man das ganze so toll lösen kann. |
Re: Schulprojekt: Spiel "Domino" programmieren!
Deine Argumente sind in diesem Fall wohl zutreffend, obwohl hier Vererbung und Interfaces nicht benötigt werden, also keine "richtige OOP".
Wer allerdings mit Records arbeiten will, muss zwangsläufig auch mit Pointern arbeiten und das fällt Anfängern deutlich schwerer, als das Verständnis für Objekte zu entwickeln. Die Datenstrukturen und Prozeduren die entwickelt werden müssen, sind letztendlich die Selben, nur Schreibaufwand und Komplexität sind für Records/Pointer höher als bei Verwendung von Objekten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 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