V
nata schrieb:
..wir sind bei Stoff Felder, Zeiger, Referenzen, dynamischer Speicher..
OOP habe ich hier nicht gelesen, darum scheiden Klassen wahrscheinlich aus. Die braucht man auch erst nicht unbedingt. Tu dir aber einen Gefallen, schreibe nicht spielfeld[10][10]; , sondern erstmal
const int xdim = 10;
const int ydim = 10;
int spielfeld[xdim][ydim];
Der Test, ob eine Koordinate innerhalb des Spielfelds liegt, kann nun gegen die Konstanten getestet werden.
int main()
{
const int xdim = 10;
const int ydim = 10;
int spielfeld[xdim][ydim]={0};
init(spielfeld,xdim,ydim);
mainloop(spielfeld,xdim,ydim);
}
So könnte die main aussehen. init(..) führt das Setzen der Schiffe aus, mainloop(..) ist das "Herzstück". Später könnte man noch alloc(..) als erstes ausführen und dynamisch Speicher für das Spielfeld anfordern.
int schiff[x1][y1] und int schuss[x][y] braucht man nicht mehr. Der Wert spielfeld[x][y] sollte Aufschluss darüber geben, was an dieser Stelle ist:
1 Spieler 1, 2 Spieler 2, ..., 0 Wasser.
Dies kann man beliebig verkomplizieren, bspw. den Typ des Schiffes noch mitspeichern.
Edit: Man braucht natürlich pro Spieler ein eigenes Spielfeld, dies könnte mit einem std::vector gemacht werden, der Auswertungsfunktion wird dann einfach das aktuelle Spielfeld übergeben.