Autor Beitrag
Horst-Dieter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 16



BeitragVerfasst: 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 user profile iconNarses: Source-Archiv auf Quelltext reduziert (redundante Compilate entfernt).
Einloggen, um Attachments anzusehen!
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 30.08.09 15:49 
Ja es funktioniert gut. Allerdings hast du dir die Sache etwas schwer gemacht
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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:

ausblenden 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);

// und später dann wieder umgekehrt
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91
Erhaltene Danke: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 01.09.09 20:12 
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Gruselige Vorstellung den Tag auf einen Zeiger umzubiegen!


Lol, ich wusste dass das jetzt kommen würde ;)
Delphi Hilfe hat folgendes geschrieben:

Tag hat keine vordefinierte Bedeutung. Die Eigenschaft Tag steht zur freien Benutzung durch Entwickler zur Verfügung. Sie können in dieser Eigenschaft zusätzliche Informationen über die Komponente in Form einer Ganzzahl speichern oder die Eigenschaft in einen 32-Bit-Wert, wie z.B. in eine Komponentenreferenz oder einen Zeiger, umgewandelt werden.


Also nix gruseliges sondern eine der diversen Möglichkeiten für die Tag gedacht ist. Keiner wird aber gezwungen das so zu machen ;)

P.S. wenn man mit TList arbeitet findet man es noch weniger Gruselig... das funktioniert nämlich im Prinzip genauso ;)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)