Autor |
Beitrag |
Horst-Dieter
      
Beiträge: 91
Erhaltene Danke: 16
|
Verfasst: So 30.08.09 09:50
Immer mal wieder verschoben oder neu angefangen. Jetzt scheint mein Reversi endlich fertig zu sein.
Auf eine Spielregel wurde verzichtet. Das Spiel sollte bekannt sein. Man spielt gegen den Computer, gesetzt wird abwechselnd. Wer am Schluss die meisten Steine in seiner Farbe hat, hat gewonnen. Viel Spass !
Mein Reversi kann in 7 Schwierigkeitsgraden gespielt werden. Theoretisch sind viel mehr Grade möglich, doch verlängert die Zugtiefe die Rechnerzeit dann bis ins Unerträgliche.
Die Brettgröße kann frei gewählt werden. Das Spielbrett kann man von der Größe 4x4 bis zur Größe 16x16 verstellen. Gestartet wird mit dem bekannten 8x8-Brett. Das Programm passt sich unterschiedlichen Bildschirmgrößen an.
Das Programm macht auf Wunsch auch Zugvorschläge.
Moderiert von Narses: Source-Archiv auf Quelltext reduziert (redundante Compilate entfernt).
Einloggen, um Attachments anzusehen!
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: So 30.08.09 14:41
Gratualtion,
bis auf das Flakern beim Setzen der Steine habe ich keine negativen Kritikpunkte.
Positiv ist die Konzentration auf das Wesentliche. Direkt nach Programmstart kann losgelegt werden ohne das EInstellungen getätigt werden müssen. Daumen hoch.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: So 30.08.09 15:49
Ja es funktioniert gut. Allerdings hast du dir die Sache etwas schwer gemacht
Delphi-Quelltext 1: 2: 3: 4: 5:
| for s:=1 to groesse do begin for z:=1 to groesse do begin Bild[s,z]:=TImage.create(self); end; end; |
Hier erzeugst du Images. Später weist du den Images dann die bereits vorhandenen zu um ein Array deiner Images zu erhalten - dazu hättest du sie allerdings nicht erzeugen müssen, weil du nur Zeiger kopierst. Besser wäre es die Images gleich hier mit der richtigen left,top,,width,height,parent einstellung zu erzeugen und per Show sichtbar zu machen. Dann hättest du dir deine Image11-Image230 sparen können. Noch besser, dann könntest du nämlich auch das Flackern beheben, wäre es das Ganze Spielfeld auf ein einziges Image, Paintbox o.ä. zu zeichnen, am besten Doppeltgepuffert.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Horst-Dieter 
      
Beiträge: 91
Erhaltene Danke: 16
|
Verfasst: Mo 31.08.09 08:26
Die Schwierigkeit bestand darin - und dafür habe ich bis jetzt noch keine Lösung gefunden - den erzeugten Bildern Bild[s,z] den richtigen Wert für die Eigenschaft Tag zuzuweisen, denn damit wird dem Programm mitgeteilt, welches Bild angeklickt wurde.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 31.08.09 12:36
Achso... naja ist nicht so wichtig, es funktioniert ja so, aber für später vielleicht mal: du hättest dir ein Record definieren können was alle Daten enthält die du brauchst (z.B. x und y Koordinate des Kästchens), und dieses als Zeiger in den Tag reinschreiben können:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type pMeinRecord = ^tMeinRecord; tMeinRecord = record x,y: Integer; einWert: Double; nocheinwert: Byte; end;
[..]
var pDaten: pMeinRecord; [..] new(pDaten); pDaten^.x := 1; pDaten^.y := 5; Image[1,5].Tag := Integer(pDaten);
pDaten := pMeinRecord(Image[1,5].tag); |
Auf die Art bekommst du viel mehr Daten in ein Tag rein. Andere Möglichkeit: du könntest auch eine eigene Komponente von tImage ableiten die dann deine gewünschten Felder beinhaltet.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Horst-Dieter 
      
Beiträge: 91
Erhaltene Danke: 16
|
Verfasst: Di 01.09.09 16:58
Danke für die Anregung. Auf diese schöne Idee bin ich nicht gekommen. Werde ich mir merken und dann bei künftigen Programmen verwenden.
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 01.09.09 19:43
Gruselige Vorstellung den Tag auf einen Zeiger umzubiegen!
Die beste Lösung ist immernoch ein Array mit Daten, parallel zur Visualisierung mitzuführen. In diesem Datenarray kann auch eine Referenz auf das Bild was jeden Eintrag representiert mit enhalten sein.
Im Endeffekt ist ein Spiel doch auch nichts anderes als eine Ansammlung von Daten die bearbeitet wird. Nur das hier die Visualisierung und Benutzerinteraktion im Vordergrund steht.
Stell dir vor du schaffst die ganzen einzelnen Bilder ab und arbeitest mit einem einzigen Bild in das zu einfach zeichnest, woran willst du dann deinen Tag festmachen?
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Di 01.09.09 20:12
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|