2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
406
406
EMPFEHLEN
-
Hallo Leute,
ich muss Schiffe versenken Programmieren und hab ein kleines Problem an der Stelle wo es darum geht das Spieler2 Koordinaten ein gibt zum Angriff. Hier ist der ganze Code den ich bis jetzt habe.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#include <iostream> using namespace std; const int A=9; const int B=7; int main() { char Spielfeld[A][B]; int a, b; char ca, cb; for (a=0; a<A; a++) { for (b=0; b<B; b++) { Spielfeld[a][b] = '.'; } } // Anzeige und Eingabe bool SchleifenEnde=false; int xin, yin; do { cout << " 1 2 3 4 5 6 7 8 9" << endl; for (b=0; b<B; b++) { cout << (char)('A'+b) << " "; for (a=0; a<A; a++) { cout << " " << Spielfeld[a][b]; } cout << endl; } cout << "Spieler 1 -- Koordinaten setzen: (ZZ eingeben wenn die Schiffe platziert sind)" << endl; cin >> ca >> cb; xin = ca - '1'; yin = cb - 'A'; if (xin>=0 && xin<9 && yin>=0 && yin<7) { Spielfeld[xin][yin] = '1'; } else { SchleifenEnde = true; } } while (!SchleifenEnde); char cy, cx; cout << "Spieler 2 -- Welches Feld befeuern?:" << endl; cin >> cy >> cx; xin = cy - '1'; yin = cx - 'A'; if (xin>=0 && xin<9 && yin>=0 && yin<7) { Spielfeld[xin][yin] = '2'; } else; }
Ich will die Koordinaten wieder in Indizes umrechnen und prüfen, ob an dieser Stelle eine 1 steht (Treffer) oder nicht (Wasser). Getroffene Punkte im Array sollen durch '2.' ersetzt werden. Das ganze in einer Schleife, bis sich keine 1 im Feld mehr findet. Versuchs seit gestern und bekomms ned hin. Kann mir bitte jemand helfen?
Lieben Gruß
Marimi
-
Wenn du in dem Spielfeld Array '2.' speichern willst, dann musst du die Dimension vergrößern.
Code cpp:1
char Spielfeld[A][B][2];
Dann halt an erster Stelle die 2 rein und an zweiter den Punkt.Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
So die angeschossene Position kann ich jetzt speichern:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
char cy, cx; cout << "Spieler 2 -- Welches Feld befeuern?:" << endl; cin >> cy >> cx; xin = cy - '1'; yin = cx - 'A'; if (xin>=0 && xin<9 && yin>=0 && yin<7) { Spielfeld[xin][yin] = '2'; } else; cout << " 1 2 3 4 5 6 7 8 9" << endl; for (b=0; b<B; b++) { cout << (char)('A'+b) << " "; for (a=0; a<A; a++) { cout << " " << Spielfeld[a][b]; } cout << endl;
Jetzt kommt nur noch der Part mit Treffer, Versenkt und so. Ich wollte das so machen, dass ich eine for Schleife mit integrierter if Abfrage mache die alle Zeilen durch geht und prüfen lasse ob auf den Nachbarfeld noch wo eine 1 steht, wenn ja soll er "Treffer" ausgeben und sonst "Versenkt" naja und wenn da nur son '.' und irgendwie muss sich das Wasser noch einbauen
'
Leider arbeite ich das erste Mal mit mehrdimensionalen Arrays und weiß nicht recht wie ich da arbeiten muss. Bei meinem Versuch gabs so eine ISO Fehler meldung: ISo forbidds comparison between pointer und integer.
Kann mir bitte wer helfen?
Danke im Vorraus, lieben Gruß
Marimi
-
Kann es sein, dass bei deinem Code etwas fehlt? Die Abfrage kann ich jetzt nicht erkennen.
Aber nach dem was du schreibst, scheinst du ja eine Zahl mit einer Adresse vergleichen zu wollen das geht natürlich nicht. Bei einem solchen Vergleich müsstest du den Zeiger dereferenzieren also
Code cpp:1
if(*p==k)
sofern p ein Zeiger auf int und k ein int.Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
da der ganze code sry da hat es was abgeschnitten:
ich hab quasi ein Spielfeld die Koordinaten wo Spieler1 ein schiff hinhaben will wird mit '1' belegt und die Koordinaten wo Spieler 2 drauf schießt kommt eine 2 rein.Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
#include <iostream> using namespace std; const int A=9; const int B=7; int main() { char Spielfeld[A][B]; int a, b; char ca, cb; for (a=0; a<A; a++) { for (b=0; b<B; b++) { Spielfeld[a][b] = '.'; } } // Anzeige und Eingabe bool SchleifenEnde=false; int xin, yin; do { cout << " 1 2 3 4 5 6 7 8 9" << endl; for (b=0; b<B; b++) { cout << (char)('A'+b) << " "; for (a=0; a<A; a++) { cout << " " << Spielfeld[a][b]; } cout << endl; } cout << "Spieler 1 -- Koordinaten setzen: (ZZ eingeben wenn die Schiffe platziert sind)" << endl; cin >> ca >> cb; xin = ca - '1'; yin = cb - 'A'; if (xin>=0 && xin<9 && yin>=0 && yin<7) { Spielfeld[xin][yin] = '1'; } else { SchleifenEnde = true; } } while (!SchleifenEnde); char cy, cx; cout << "Spieler 2 -- Welches Feld befeuern?:" << endl; cin >> cy >> cx; xin = cy - '1'; yin = cx - 'A'; if (xin>=0 && xin<9 && yin>=0 && yin<7) { Spielfeld[xin][yin] = '2'; } else; cout << " 1 2 3 4 5 6 7 8 9" << endl; for (b=0; b<B; b++) { cout << (char)('A'+b) << " "; for (a=0; a<A; a++) { cout << " " << Spielfeld[a][b]; } cout << endl; } for (int n=0; n; n++ ){ //Abfrage soll hier dann sein das war aber falsch } return 0; }
' Aber ich glaube das kann so generll nicht funktionieren.
Lieben Gruß
-
Das wollte ich auch längst angemerkt haben. Beim "echten" Schiffeversenken hat ja auch jeder ein eigenes Spielfeld. Du kannst durchaus ein einziges Spielfeld nehmen, aber du solltest dann wieder durch eine weitere Dimension die verschiedenen Spieler kennzeichnen, das wird dann jedoch irgendwann unübersichtlich.
Du kannst das natürlich auf verschiedene Weisen realisieren, die alle zum gleichen Ergebnis führen. Ich würde es z.B so realisieren das jedes Spielfeld eines Spielers mit 0=Wasser vorbelegt ist. Dann trägt jeder Spieler seine Schiffe (=1?) und wenn dann das Spiel beginnt kannst du mit einer weiteren Zahl Treffer signalisieren, und einer weiteren Zahl wiederum Nieten, so weißt du auch beim Betrachten einer Zahl sofort, was dort passiert ist.
GrüßeWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
Ähnliche Themen
-
Schiffe versenken - Probleme
Von Effa im Forum Java GrundlagenAntworten: 5Letzter Beitrag: 28.04.11, 15:54 -
Schiffe versenken für Einsteiger?
Von Marimi im Forum C/C++Antworten: 4Letzter Beitrag: 14.11.10, 12:45 -
[Perl] Schiffe versenken...
Von Coldfist im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 21.01.07, 16:13 -
Schiffe versenken
Von Victim De Ace im Forum JavaAntworten: 1Letzter Beitrag: 12.04.06, 18:21





Zitieren
Login






