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 beendet 🙂

    Hier 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 ==> 4

    Also 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 
    }
    

Anmelden zum Antworten