![]() |
Array of Pointer ... oder so
Moinmoin,
Ich wollte mal Minesweeper programmieren und dafür eine klasse TMineButton (von TSpeedButton abgeleitet) und eine klasse TMineField (von TPanel) machen. unter anderem sollte ein TMineButton 8 "Neighbours" haben, also die buttons um ihn herum. Jetzt wollte ich mal ausprobieren, wie das mit pointern geht, also sollte es ungefähr so aussehen:
Delphi-Quellcode:
zuerst hatte ich halt anstatt pointer überall ^TMineButton
type TMineButton = class(TSpeedButton)
private fNeighbour : array[0..7] of Pointer; ... function TMineButton.GetNeighbour(Index : Integer) : Pointer; begin Result := fNeighbour[Index]; end; procedure TMineButton.SetNeighbour(Index: Integer; P: Pointer); begin fNeighbour[Index] := P; end; eine routine aus TMineField sollte dann einem Button später automatisch die addresse der benachbarten buttons als neighbour zuweisen ... aber irgendwie klappt das nicht ^^ es kommt ein EStackOverflow ... kann mir jemand sagen, wie es richtig geht? oder sollte man einfach ein array der koordinaten der benachbarten buttons machen, weil es so nicht geht? vielen dank im vorraus |
Re: Array of Pointer ... oder so
einfach statt Pointer TSpeedButton verwenden ... bzw TMineButton
|
Re: Array of Pointer ... oder so
ja ... aber verbraucht das nicht zuviel speicher? - wäre jetzt meine frage gewesen, wobei mir grade einfällt dass es dann wahrscheinlich gar nicht neu gespeichert wird .. so wie arrays, oder? ^^
hm ok, also gar nicht mit pointern ... danke |
Re: Array of Pointer ... oder so
habs grad geändert, Stack Overflow gibts trotzdem ...
|
Re: Array of Pointer ... oder so
Zitat:
Delphi-Quellcode:
Ich würde gar kein Array mit Nachbarn verwenden, sonder jeder Mine ihre Koordinate im Minenfeld mitgeben. Daraus kann sie sich dann die Nachbarn errechnen:
var
Mine1, Mine2: TMineButton; Mine1 := TMineButton.Create; //Damit wird eine Instanz von TMineButton erzeugt und der Speicher entsprechend reserviert. Mine1 enthält nun einen Zeiger auf die Daten. Mine2 := Mine1; //Damit wird nur der Zeiger, der auf Mine1 zeigt Mine2 zugewiesen, d.h. Mine1 und Mine2 zeigen nun auf die gleiche Instanz. Mine mit den Koordinaten x/y Nachbarn: x-1/y-1 x-1/y x-1/y+1 usw. Du musst natürlich noch kontrollieren, ob die Koordinate nicht an die Grenze des Minenfeldes stößt und der Mine eine Referenz auf das komplette Minenfeld mitgeben. |
Re: Array of Pointer ... oder so
ok, dieses verständnis von zeigern und objektnamen hatte ich noch nicht ... danke
ja, ich hab die koordinaten haben sie auch schon, ich dachte nur mit pointer wäre es eleganter und einfacher zu lösen ... aber gut wenn es nicht einfacher geht, dann danke ich euch und einen schönen tag noch. ^^ |
Re: Array of Pointer ... oder so
Hab das mal mit einem mehrdimensionalen Array geschrieben, wo an jeder Stelle über Bits der Status des jeweiligen Feldes steht. Die Lösung an sich war praktikabel und über die Indizes im Array, konnte man auch sofort auf die Nachbarn und deren Status zugreifen.
Falsch finde ich ein Array für dieses Spiel wirklich nicht. |
Re: Array of Pointer ... oder so
Zitat:
PS: wie hattest du denn deine Pointer referenziert? (hoffentlich nicht über lokale Variablen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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 by Thomas Breitkreuz