Hallo an Alle,
ich möchte Schiffe mit einer while setzen. Das klappt auch meistens.
Manchmal wird mir ein Schiff nicht gesetzt, obwohl ich einen kompletten Durchlauf erzwinge(denke ich jedenfalls).
---------------------------------------------------------------------------------------------
if ((int)((Math.random()*50)%2) == 1) { //zufällige Ausrichtung der Schiffe
ink = feldbreite; //senkrechtes Inkrement
isSenkrecht = true;
}
int zs = 0; //zs = ZelleSchiff
while(!isSchiffGesetzt && versuche++ < (200+spielfeldGröße-1)){ //solange versuchen, bis Platz für Schiff gefunden
isSchiffGesetzt = true;
if(versuche <= 200) {
zs = (int)(Math.random()*spielfeldGröße);
}
if(versuche > 200){
zs = versuche-200;
isSenkrecht = !isSenkrecht;
}
int x = 0; //Zähler für Schiffsteile
while (isSchiffGesetzt && x < schiffLaenge) {
if(zs < spielfeldGröße){
if(spielfeld[zs] == 0){
zellenSchiff[x] = zs;
if(x > 0 && (zs % feldbreite == 0)){//über rechten Rand
isSchiffGesetzt = false;
}
if(zs < spielfeldGröße && spielfeld[zs] != 0){
isSchiffGesetzt = false; //prüfen, ob nächste Zellen frei sind
}
zellenSchiff[x++] = zs;
zs = (zs+ink);
} else isSchiffGesetzt = false;
}
----------------------------------------------------------------------------------------------
zuerst wird die Ausrichtung der Schiffe zufällig gesetzt
in der äußeren while wird das erste Startfeld zufällig bestimmt und bei mehr als 200 Versuchen soll der Durchlauf des gesamten Feldes erzwungen werden (ich sehe ja bei der Ausgabe des Spielfeldes noch viel freien Platz - Platzmangel herrscht also nicht).
Das Problem ist, es werden manchmal nicht alle Schiffe gesetzt.
Ich hab' mit in der zweiten while schon die "zs" ausgeben lassen , es geht ordentlich alle Werte durch, setzt aber kein Schiff.
Woran kann das liegen? Weiß jemand Hilfe oder Rat?
Ich hoffe, ich konnte mein Problem deutlich machen.
Für jede Anregung und Hilfe bin ich dankbar.
liebe Grüße
ich möchte Schiffe mit einer while setzen. Das klappt auch meistens.
Manchmal wird mir ein Schiff nicht gesetzt, obwohl ich einen kompletten Durchlauf erzwinge(denke ich jedenfalls).
---------------------------------------------------------------------------------------------
if ((int)((Math.random()*50)%2) == 1) { //zufällige Ausrichtung der Schiffe
ink = feldbreite; //senkrechtes Inkrement
isSenkrecht = true;
}
int zs = 0; //zs = ZelleSchiff
while(!isSchiffGesetzt && versuche++ < (200+spielfeldGröße-1)){ //solange versuchen, bis Platz für Schiff gefunden
isSchiffGesetzt = true;
if(versuche <= 200) {
zs = (int)(Math.random()*spielfeldGröße);
}
if(versuche > 200){
zs = versuche-200;
isSenkrecht = !isSenkrecht;
}
int x = 0; //Zähler für Schiffsteile
while (isSchiffGesetzt && x < schiffLaenge) {
if(zs < spielfeldGröße){
if(spielfeld[zs] == 0){
zellenSchiff[x] = zs;
if(x > 0 && (zs % feldbreite == 0)){//über rechten Rand
isSchiffGesetzt = false;
}
if(zs < spielfeldGröße && spielfeld[zs] != 0){
isSchiffGesetzt = false; //prüfen, ob nächste Zellen frei sind
}
zellenSchiff[x++] = zs;
zs = (zs+ink);
} else isSchiffGesetzt = false;
} else isSchiffGesetzt = false;
} }
----------------------------------------------------------------------------------------------
zuerst wird die Ausrichtung der Schiffe zufällig gesetzt
in der äußeren while wird das erste Startfeld zufällig bestimmt und bei mehr als 200 Versuchen soll der Durchlauf des gesamten Feldes erzwungen werden (ich sehe ja bei der Ausgabe des Spielfeldes noch viel freien Platz - Platzmangel herrscht also nicht).
Das Problem ist, es werden manchmal nicht alle Schiffe gesetzt.
Ich hab' mit in der zweiten while schon die "zs" ausgeben lassen , es geht ordentlich alle Werte durch, setzt aber kein Schiff.
Woran kann das liegen? Weiß jemand Hilfe oder Rat?
Ich hoffe, ich konnte mein Problem deutlich machen.
Für jede Anregung und Hilfe bin ich dankbar.
liebe Grüße