Aloah,
ich habe ein Schiffeversenken programmiert auch leicht Grafisch, welches aber nicht mein problem ist. Das Spiel wird gegen den Computer gespielt nur ist dieser mir noch ein bisschen zu Blöde.
Hier erstmal meine aktuelle Funktion für den Computer Zug
Zum ablauf:
1) Wenn keine Treffer verzeichnet sind schiesse zufällig.
2) Sollten Treffer vorhanden sein, dann schiesse um diese Felder drum herum wenn auf das Feld noch nicht geschossen wurde. (getStatus abfrage)
Hat da von euch vllt jemand ne bessere Idee ? Habe mal gegooglet und bin auf einen Source von einer Uni gestoßen welche mit ner Sektor Klasse gearbeitet haben, allerdings nicht Kommentiert was die Klasse genau macht.
ich habe ein Schiffeversenken programmiert auch leicht Grafisch, welches aber nicht mein problem ist. Das Spiel wird gegen den Computer gespielt nur ist dieser mir noch ein bisschen zu Blöde.
Hier erstmal meine aktuelle Funktion für den Computer Zug
Code:
public void ComputerZug(Ship[] player_ship, int anzahl_3er, int anzahl_4er, int anzahl_5er)
{
int zufall;
int x=0;
int y=0;
boolean getroffen=false;
if(treffer.size() <= 0)
{
naechster_zug_x = ZufallInt(anzahl_felder)-1;
naechster_zug_y = ZufallInt(anzahl_felder)-1;
while(map1.getStatus(naechster_zug_x, naechster_zug_y) == 2 || map1.getStatus(naechster_zug_x, naechster_zug_y) == 3)
{
naechster_zug_x = ZufallInt(anzahl_felder)-1;
naechster_zug_y = ZufallInt(anzahl_felder)-1;
}
}
if(treffer.size()>0)
{
if(treffer.size()>=2)
{
for(int a=0;a<=treffer.size()-1;a++)
{
Punkt p = (Punkt)treffer.get(a);
x_pos[a] = p.getX();
y_pos[a] = p.getY();
}
for(int a=0;a<x_pos.length;a++)
{
for(int b=0;b<x_pos.length;b++)
{
if(x_pos[b] == x_pos[a]+1)
{
if(x_pos[b]+1 < anzahl_felder)
{
naechster_zug_x = x_pos[b] +1;
naechster_zug_y = y_pos[b];
}
if(map1.getStatus(naechster_zug_x, naechster_zug_y) == 2 || map1.getStatus(naechster_zug_x, naechster_zug_y) == 3)
{
if(x_pos[b]-1 > 0)
{
naechster_zug_x = x_pos[b] -1;
naechster_zug_y = y_pos[b];
}
if(map1.getStatus(naechster_zug_x, naechster_zug_y) == 2 || map1.getStatus(naechster_zug_x, naechster_zug_y) == 3)
{
naechster_zug_x = ZufallInt(anzahl_felder)-1;
naechster_zug_y = ZufallInt(anzahl_felder)-1;
}
else
{
break;
}
}
else
{
break;
}
}
}
}
}
Punkt p = (Punkt)treffer.get(0);
x = p.getX();
y = p.getY();
if(map1.alleFelderUmPunktBesetzt(x, y))
{
treffer.remove(0);
}
if(x+1 < anzahl_felder && x-1 >= 0 && y+1 < anzahl_felder && y-1 >=0)
{
while(map1.getStatus(x, y) == 2 || map1.getStatus(x, y) == 3)
{
zufall = ZufallInt(4);
switch(zufall)
{
case 1: x = x +1; break;
case 2: y = y +1; break;
case 3: x = x -1; break;
case 4: y = y -1; break;
}
}
naechster_zug_x = x;
naechster_zug_y = y;
}
}
for(int c=0; c<(anzahl_3er + anzahl_4er + anzahl_5er); c++)
{
if(player_ship[c].shipHit(naechster_zug_x, naechster_zug_y))
{
map1.schussSetzen(naechster_zug_x, naechster_zug_y, true);
getroffen = true;
treffer.add(new Punkt(naechster_zug_x, naechster_zug_y));
}
}
if(!getroffen)
{
map1.schussSetzen(naechster_zug_x, naechster_zug_y, false);
}
}
Zum ablauf:
1) Wenn keine Treffer verzeichnet sind schiesse zufällig.
2) Sollten Treffer vorhanden sein, dann schiesse um diese Felder drum herum wenn auf das Feld noch nicht geschossen wurde. (getStatus abfrage)
Hat da von euch vllt jemand ne bessere Idee ? Habe mal gegooglet und bin auf einen Source von einer Uni gestoßen welche mit ner Sektor Klasse gearbeitet haben, allerdings nicht Kommentiert was die Klasse genau macht.