Bräuchte Hilfe bei Schiffe versenken, C++
-
Hallo liebe C++Freunde,
ich habe ein Schiffe versenken programmiert und das Programm läuft soweit eigentlich ganz gut.
Jetzt versuche ich ein paar Verbesserungen durchzuführen.
Und zwar:Momentan werden die x- und y-Koordinaten als integer/Zahlenwerte eingegeben.
Ich habe mich nun daran versucht die x-Achse mit Buchstaben zu benennen, komme aber nicht weiter.Hier das funktionstüchtige void() der Koordinateneingabe:
void spielfeld_angreifen() //Funktion: Spieler greift das Spielfeld an { int go=0; //Wert "go" wird auf 0 gesetzt do{ //"do-Schleife" läuft so lange durch, bis Wert "go" ungleich 0 int x_Koordinate, y_Koordinate; //Abfrage der Koordinatenzahlen vom Spieler char x,y; cout << "----------------------"; cout << "\nx-Koordinate "; cin >> x; cout << "y-Koordinate "; cin >> y; cout << "----------------------" <<endl; if(Computer.feldfrei [x-1][y-1]==true) //wenn das Feld schon geöffnet ist, { go=0; //wird die do schleife nicht unterbrochen } if(Computer.feldfrei[x-1][y-1]==false) //ebenso, wenn.. { if(x>5) go=0; //x-Position >5 else if(x<1) go=0; //x-Position <1 else if(y>5) go=0; //y-Position >5 else if(y<1) go=0; //y-Position <1 else //ansonsten wird das Feld besetzt { Computer.feldfrei[x-1][y-1]=true; go=1; //und die Schleife unterbrochen } } cin.get(); }while(go!=1); }
und hier mein versuch aus den x-Koordinaten Buchstaben zu machen:
(ich weiss einfach nicht, wie ich es anstellen soll..)void spielfeld_angreifen() //Funktion: Spieler greift das Spielfeld an { int go=0; //Wert "go" wird auf 0 gesetzt do{ //"do-Schleife" läuft so lange durch, bis Wert "go" ungleich 0 int x_Koordinate, y_Koordinate; //Abfrage der Koordinatenzahlen vom Spieler char x,y; cout << "----------------------"; cout << "\nx-Koordinate "; cin >> x; cout << "y-Koordinate "; cin >> y; cout << "----------------------" <<endl; if ((x>='A')&&(x<='F')&&(y>='0')&&(y<='5')) { x_Koordinate = x - 'B'; y_Koordinate = y - '1'; go=0; } else //ansonsten wird das Feld besetzt { Computer.feldfrei[x-1][y-1]=true; go=1; //und die Schleife unterbrochen } cin.get(); }while(go!=1); }
Zum Spiel: Das Feld besteht aus 5x5 Feldern. Der PC belegt die Felder zufallsgesteuert und der Spieler versucht durch Koordinateneingabe die Schiffe zu treffen.
Hat er alle 5 Schiffe getroffen ist das Spiel beendetHier noch das Hauptprogramm zum Verständnis:
int main() { system("color 70"); //Programmfarbe spielfeld_besetzen(); //Zuerst wird das Spielfeld vom PC zufallsgesteuert mit Schiffen besetzt.. regeln_erklaeren(); //Hier werden zu beginn das Regelwerk eingeblendet spielfeld_anzeigen(); //..und das Meer im Programm dem Spieler angezeigt do //(do- Schleife, bis Spieler alle gegnerischen Schiffe versenkt hat) { spielfeld_angreifen(); //Spieler attackiert das Meer.. system("CLS"); //Lösche Bildschirm spielfeld_anzeigen(); //..und sieht auf dem Spielfeld seine Schüsse.. zeichenbedeutung(); //..und die Bedeutung des Spielfeldes.. } while (s_zaehler < 5); //..bis er alle Schiffe versenkt hat.. ende(); //..und das Spiel ist beendet3333222222 return 0; }
würde mich freuen, wenn ihr mir ein paar tipps geben könntet, wie ich vorgehen sollte um die x-Achse mit Buchstaben "angreifen" zu können
Danke schon mal für eure Hilfe
-
Hallo Ameisenhaufen_w203,
wenn ich das richtig verstanden hast, willst du die Buchstaben A-E zu Zahlen 0-4 umwandeln, um auf die Elemente des Arrays zuzugreifen.
Dazu guckst du dir am besten mal die ASCII-Tabelle an:
http://www.torsten-horn.de/techdocs/ascii.htm
Dort siehst du, dass A die Nummer 65 hat.
'A' = 65 ==> 0
'B' = 66 ==> 1
'C' = 67 ==> 2
'D' = 68 ==> 3
'E' = 69 ==> 4Also musst du von deinem Buchstaben 65 (bzw. 'A') abziehen, damit du die richtigen Werte bekommst.
Von Y musst du dann entsprechend '0' bzw 48 abziehen (siehe ASCII Tabelle).
-
-
Lösung stand da ja schon fast richtig.
Würde es allerdings etwas kürzen:
x_Koordinate = x - 'A'; y_Koordinate = y - '0'; if ((x_Koordinate>=0)&&(x_Koordinate<=4)&&(y_Koordinate>=0)&&(y_Koordinate<=4)) { // Feld wird besetzt Computer.feldfrei[x_Koordinate][y_Koordinate]=true; go=1; //und die Schleife unterbrochen }