Hallo!
Bin grade dabei mir java beizubringen und bin mittlerweile bei Objekten angelangt, Theorie geht halbwegs aber in der Praxis häng ich noch..., jedenfalls will ich "Schiffe versenken" in einer abgespeckten Variante schreiben. Ich habe jetzt das Problem, dass das Programm beim Anlegen (also dem Verteilen auf dem Spielfeld) der Schiffe in einer Endlosschleife läuft.
Ich füg hier mal den Code ein von dem ich denke dass der fehler irgendwo dort liegt, vermutlich fehlt wo ein return oder sonst was, aber ich komm einfach nicht drauf. Wenn wer sieht woran es liegt würde ich mich über einen Hinweis freuen .
ist nur ein Auszug, also nicht drüber wundern, dass die Klassen nicht abgeschlossen sind und noch andere Dinge drinstehen etc., aber hier sollte der Fehler liegen...
Einige Ausgaben sind nur zu Kontrollzwecken.
Die IO class ist ok und ersetzt nur System.out etc.
Exceptions kommen keine, er läuft einfach ins Nichts...
Tja, das war's, wenn wer bis hier gelesen hat: meinen Glückwunsch
lG
Bin grade dabei mir java beizubringen und bin mittlerweile bei Objekten angelangt, Theorie geht halbwegs aber in der Praxis häng ich noch..., jedenfalls will ich "Schiffe versenken" in einer abgespeckten Variante schreiben. Ich habe jetzt das Problem, dass das Programm beim Anlegen (also dem Verteilen auf dem Spielfeld) der Schiffe in einer Endlosschleife läuft.
Ich füg hier mal den Code ein von dem ich denke dass der fehler irgendwo dort liegt, vermutlich fehlt wo ein return oder sonst was, aber ich komm einfach nicht drauf. Wenn wer sieht woran es liegt würde ich mich über einen Hinweis freuen .
Code:
public class Battleships {
// decare global cnst
public static final int MAX_SHIPS = 10;
public static final int MAX_HITS = 4 * 2 + 3 * 3 + 2 * 4 + 1 * 5; // 30 hits
public static final int MIN_SHIP_LENGTH = 2;
public static final int MAX_SHIP_LENGTH = 5;
public static final int FIELDSIZE = 20;
private static Ship[] ships = new Ship[MAX_SHIPS];
private static Field[][] water = new Field[20][20];
// private static private static Random rand;
public static void main(String[] args) {
boolean ok = false;
for (int i = 0; i < FIELDSIZE; i++) {
for (int j = 0; j < FIELDSIZE; j++) {
water[i][j] = new Field(i, j);
}
}
for (int k = 0; k < 4; k++) {
while (!ok) {
if (placeShip(2)) {
ok = true;
}
}
ok = false;
}
for (int z = 0; z < 3; z++) {
while (!ok) {
if (placeShip(3)) {
ok = true;
}
}
ok = false;
}
for (int w = 0; w < 2; w++) {
while (!ok) {
if (placeShip(4)) {
ok = true;
}
}
ok = false;
}
while (!ok) {
if (placeShip(5)) {
ok = true;
}
}
//game();
}
public static boolean placeShip(int len) {
int x, y;
boolean horiz;
IO.write("again");
if (random('h') == 0) {
horiz = true;
} else {
horiz = false;
}
x = random();
y = random();
int i = 0;
while (ships[i] != null) {
i++;
}
if (isPlaceable(x, y, len, horiz)) {
Field[] arr = new Field[len];
IO.writeLn("ok");
for (int j = 0; j < len; j++) {
if (horiz)
arr[j] = water[x][y + j];
else
arr[j] = water[x + j][y];
}
ships[i] = new Ship(arr);
water[x][y].ship = ships[i];
for (int k = 0; k < (len - 1); k++) {
if (horiz) {
x++;
} else {
y++;
}
water[x][y].ship = ships[i];
}
} else {
// placeShip(len);
return false;
}
return true;
}
public static boolean isPlaceable(int x, int y, int len, boolean horiz) {
if (water[x][y].getShip()) {
return false;
} else {
IO.writeLn(x + " " + y);
for (int i = 0; i < (len - 1); i++) {
if (horiz) {
x++;
} else {
y++;
}
if ((x > 19) || (y > 19)) {
return false;
}
if (water[x][y].ship != null) {
return false;
}
}
}
return true;
}
public static int random() {
int rndm = (int) (Math.random() * 20);
return rndm;
}
public static int random(char h) {
int rndm = (int) (Math.random() * 2);
return rndm;
}
Code:
public class Field {
private int x, y;
private static boolean hit = false;
public static Ship ship = null;
public Field(int x, int y) {
this.x=x;
this.y=y;
}
public static boolean getShip() {
if (ship != null) {
return true;
} else {
return false;
}
}
public static boolean getHit() {
if(hit==true){
return true;
}else {
return false;
}
}
Code:
public class Ship {
private Field[] deck;
public Ship(Field[] deck) {
deck = deck;
}
ist nur ein Auszug, also nicht drüber wundern, dass die Klassen nicht abgeschlossen sind und noch andere Dinge drinstehen etc., aber hier sollte der Fehler liegen...
Einige Ausgaben sind nur zu Kontrollzwecken.
Die IO class ist ok und ersetzt nur System.out etc.
Exceptions kommen keine, er läuft einfach ins Nichts...
Tja, das war's, wenn wer bis hier gelesen hat: meinen Glückwunsch
lG