Programm in C.
Schiffe versenken.
In dem Programm ist was faul. Zeigt meine Schiffe an, aber keine Treffer. Und versenken geht schon gar nicht.
Mir fehlt langsam der Durchblick.
Hier der Code: Hoffe, dass meine Kommentare ausreichend sind.
Wo liegen die Fehler, kann man die zwei verschachtelten Schleifen vereinfachen?
LG T
Editiert von CDW: [ CODE ] [ /CODE ] - damit es auch lesbar wird
Schiffe versenken.
In dem Programm ist was faul. Zeigt meine Schiffe an, aber keine Treffer. Und versenken geht schon gar nicht.
Mir fehlt langsam der Durchblick.
Hier der Code: Hoffe, dass meine Kommentare ausreichend sind.
Code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i,j,x,y, anzBoote;
// das Spielfeld wird in 10 Zeilen a 10 felder aufgeteilt
char sfx[100];
char* feld[10] ; // array von zeigern auf den zeilenanfang der i-ten zeilen
for (i=0; i < 10; i++) feld[i] = sfx+10*i; // adresse des 10*i-ten elements in sfx (ist erstes (genauer nulltes) element der i-ten zeile)
// initialisiere feld, alles 0:
for (i=0; i < 10; i++)
for (j=0; j < 10; j++)
feld[i][j] = 0;
// schiffe setzen: koordinaten x,y
anzBoote = 0; // so viele boote sind auf dem spielfeld
do {
printf("\n Bitte x-Koordinate eingeben:");
scanf("%i", &x);
printf("\n Bitte y-Koordinate eingeben:");
scanf("%i", &y);
// pruefe daten: x,y im spielfeld und noch kein schiff an dieser stelle
if (0<= x && x <10 && 0 <= y && y < 10 && !(feld[y][x] & 2)) {
feld[y][x] = 2;
anzBoote++;
}
printf("\n Weiter mit j.");
} while (getch() == 'j');
/*
// Ausgabe
printf("\n");
for (i=0; i < 10; i++) {
for (j=0; j< 10; j++)
if (feld[i][j] & 2) printf("x"); else printf(".");
printf("\n");
}
*/
// versenken
while (anzBoote) {
printf ("\n\n");
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++)
if (feld[i][j] & 1) {
if (feld[i][j] & 2) printf("X"); else printf("0");
} else printf(".");
printf("\n");
}
printf("\n Bitte x-Koordinate eingeben:");
scanf("%i", &x);
printf("\n Bitte y-Koordinate eingeben:");
scanf("%i", &y);
if ( 0<= x && x < 10 && 0 <= y && y < 10) {
if (!(feld[y][x] & 1)) {
feld[y][x] = feld[y][x] | 1;
if (feld[y][x] & 2) anzBoote--;
}
}
}
system("PAUSE");
return 0;
}
LG T
Editiert von CDW: [ CODE ] [ /CODE ] - damit es auch lesbar wird
