Hi!
Ich habe mir vorgenommen ein kleines Schiffchenversenken zu programmieren. Nun habe ich mir gedacht ich könnte mir eigentlich eine Spielfeldklasse erstellen die ich später auch für andere Spiele verwenden kann.
Meine Idee hierzu ist ein Array von Buttons zu erstellen und diesem dann die Anzahl, Größe, Position,... der einzelnen Elemente zu übergeben, bzw nach dem ersten zu berechnen. Leider habe ich es nicht geschafft auf Eigenschaften der Buttons zuzugreifen.
Kann mir hier vielleicht jemand behilflich sein oder hat eine bessere Idee für das Design des Spielfelds?
Habe schon daran gedacht das Feld einfach zu zeichnen und den Benutzer Koordinaten eingeben zu lassen, finde aber die Möglichkeit einfach nur "klicken" zu müssen um ein bestimmtes Feld anzuwählen benutzerfreundlicher...
Danke für die Tipps/Hilfe!!!
MfG empty.at
PS: Hoffe ich bin hier Richtig, wenn nicht bitte ich einen Admin das Thema zu verschieben. Danke!!!
Zugriff:
Button[] myArray = ...;
myArray[0].Text = ...;
Ich würde folgendes Konstrukt vorschlagen:
public class Spielfeld<C>
where C : System.Windows.Forms.Control, new
{
private System.Collection.Generics.List<System.Collections.Generics.List<C>>
positivPositiv; // bereich für x und y größer 0
private System.Collection.Generics.List<System.Collections.Generics.List<C>>
positivNegativ; // bereich für x>0 und y<0
private System.Collection.Generics.List<System.Collections.Generics.List<C>>
negativNegativ; // bereich für x und y kleiner 0
private System.Collection.Generics.List<System.Collections.Generics.List<C>>
negativPositiv; // beriech für x<0 und y>0
public C this[int x, int y]
{
get
{
System.Collection.Generics.List<System.Collections.Generics.List<C>> list;
if(x<0)
{
if(y<0)
{
list = this.negativNegativ;
}
else
{
list = this.negativPositiv;
}
}
else
{
if(y<0)
{
list = this.positivNegativ;
}
else
{
list = this.negativNegativ;
}
}
return list[Math.Abs(x)][Math.Abs(y)];
}
set
{
// Analog zu get. Bin zu Faul :P
}
}
}
Durch das Generic <C> kannst du dann beliebige Contorls verwenden (z.B. PicktureBoxen, ....).
Durch die List<List<C>> Objekte kann man das Feld dann (wenn nötig) dynamisch machen.
Hoffe ich hab dich jetzt nicht überfahren.
Gruß
Juy Juka
Hallo empty.at,
das mit den (echten) Buttons geht nur für ziemlich kleine Spielfelder, sonst gibt es Performance-Probleme. Siehe Optimierungsideen ?
herbivore