/* "Schiffe" versenken (Wären das dann nicht eigendlich U-Boote wenn man sie nur sieht wenn sie getroffen wurden?) Code geschrieben von Tobias Schmidt Legende: ~ - Wasser S - Schiff o - Getroffenes "Schiff" x - Fehlgeschlagener Schuss */ #include #include #include #include #include #define sizeX 8 #define sizeY 8 #define maxCachedGegnerZuege 4 #define maxShips 16 // Interne Variablen #define wasser 0 #define daneben 1 #define treffer 2 #define schiff 3 #define bereits_Daneben 11 #define bereits_Getroffen 22 // Das sieht man später anstatt der Variablen #define wasser_Icon "~ " #define daneben_Icon "x " #define treffer_Icon "O " #define schiff_Icon "S " #define bereits_Daneben_Icon "D " #define bereits_Getroffen_Icon "G " // Headerkrams void generiereSpielFeld(int spielFeld[sizeX][sizeY]); void zeigeSpielFeld(int spielFeld[sizeX][sizeY], bool nurGetroffen); int macheSpielZug (int spielFeld[sizeX][sizeY], int zugX, int zugY); bool menschlicherSpielZug(int spielFeld[sizeX][sizeY], bool istSpieler1, int mode, int debugx, int debugy); bool menschlicherSpielZug(int spielFeld[sizeX][sizeY], bool istSpieler1, int mode, int debugx, int debugy) { if (istSpieler1 && mode == 1) printf("\n\t\tDu bist am zug!\n"); else if (istSpieler1 && mode == 2) printf("\n\t\tSpieler 1 ist am zug!\n"); else if (!istSpieler1 && mode == 2) printf("\n\t\tSpieler 2 ist am zug!\n"); else if (istSpieler1 && mode == 3) printf("\n\t\tTestmodus\n"); if (mode == 3) zeigeSpielFeld(spielFeld, false); else zeigeSpielFeld(spielFeld, true); int nextx; if (debugx == -1){ do { // Nested Loop, hurray! printf("\n\t Naechster Zug: X Koordinate: "); scanf("%d", &nextx); nextx--; if (nextx > sizeX) { printf("\tDie X Koordinate ist zu gross!\n"); } else if (nextx < 0) { printf("\tDie X Koordinate ist zu klein!\n"); } else { break; } } while (1); } else nextx = debugx; int nexty; if (debugy == -1) { do { // Nested Loop again, hurray! printf("\n\t Naechster Zug: Y Koordinate: "); scanf("%d", &nexty); nexty--; if (nexty > sizeY) { printf("\tDie Y Koordinate ist zu gross!"); } else if (nexty < 0) { printf("\tDie Y Koordinate ist zu klein!"); } else { break; } } while (1); } else nexty = debugy; if (mode == 3) printf("X: %d - Y: %d", nextx, nexty); int state = macheSpielZug(spielFeld, nextx, nexty); spielFeld[nextx][nexty] = state; if (state == treffer) { //spielFeld[nextx][nexty] = treffer; printf("\n\t TREFFER! - Gegnerisches Schiff versenkt!\n"); } else if (state == daneben) { //spielFeld[nextx][nexty] = daneben; printf("\n\t Daneben! - Leider nur Wasseratome getroffen.!\n"); } else if (state == bereits_Daneben) { printf("\n\t Immernoch Daneben! - Hier ist nach wie vor kein Schiff!\n"); } else if ( state == bereits_Getroffen) { printf("\n\t Schiff bereits getroffen! - Die sind doch bereits alle tot!...\n"); } else { printf("\n\t Unbekannter Zustand... Der Entwickler ist Doof!\n"); } return 1; } int macheSpielZug (int spielFeld[sizeX][sizeY], int zugX, int zugY) { int status = spielFeld[zugX][zugX]; if (status == schiff) { return treffer; } else if (status == daneben) return bereits_Daneben; else if (status == wasser) { return daneben; } else if (status == treffer) return bereits_Getroffen; } void generiereSpielFeld(int spielFeld[sizeX][sizeY]) { int totalShipps = 0; for (int e = 0; e