AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Schulprojekt: Spiel "Domino" programmieren!
Thema durchsuchen
Ansicht
Themen-Optionen

Schulprojekt: Spiel "Domino" programmieren!

Ein Thema von He4dnut · begonnen am 25. Jan 2010 · letzter Beitrag vom 8. Feb 2010
Antwort Antwort
Seite 2 von 4     12 34      
He4dnut

Registriert seit: 25. Jan 2010
9 Beiträge
 
Lazarus
 
#11

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 13:36
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
  Mit Zitat antworten Zitat
tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#12

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 14:51
Zitat von He4dnut:
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
würde hier nen record nehmen, oder nen array.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 15:13
Zitat von He4dnut:
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)
Ich gehe jetzt mal erst nur auf die Objekte ein:

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.
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
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 15:33
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.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 15:57
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;
  Mit Zitat antworten Zitat
He4dnut

Registriert seit: 25. Jan 2010
9 Beiträge
 
Lazarus
 
#16

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 19:48
Zitat von tkone:
würde hier nen record nehmen, oder nen array.
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.
Ja so ähnlich habe ich mir das wohl vorgestellt Nur wie genau würde das aussehen?
Muss ich für jeden Dominostein die zwei Werte festlegen, in etwa so:
Delphi-Quellcode:
type TDominostein = record
        Wert1 : integer;
        Wert2 : integer;
   end;
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?

Zu Sir Rufo habe ich folgendes einmal aufgeschrieben:
Delphi-Quellcode:
 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;
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..

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!
  Mit Zitat antworten Zitat
He4dnut

Registriert seit: 25. Jan 2010
9 Beiträge
 
Lazarus
 
#17

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 20:51
Delphi-Quellcode:
 

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;
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? 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!

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

Genug für heute! Bis morgen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 27. Jan 2010, 20:52
Ich würde mir überlegen aus derm Record eine Klasse zu machen.
Markus Kinzler
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 28. Jan 2010, 09:30
@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.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: Schulprojekt: Spiel "Domino" programmieren!

  Alt 28. Jan 2010, 12:32
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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