C++ - Quellcodes erklärung?



  • Hi, bin Neuling in der C++ Programmierung und habe mir gerade erst ein Buch gekauft. Der Folgende Quelltext ist zwar erklärt aber ich verstehs trotzdem nicht.
    Die Listings sind für das Spiel "Bermuda" was sich ähnlich vie Schiffeversenken Spielt.
    Wäre vllt jemand so nett und würde mir diese Quellcodes erklären?
    Schonmal danke 😉 ➡

    Nr1: Spielfeld:

    #include <iostream>
    using namespace std;
    
    const int X=9;
    const int Y=7;
    
    int main()
    {
       char Spielfeld[X][Y];
       int x, y;
       char cx, cy;
    
        for (x=0; x<X; x++)
        {
            for (y=0; y<Y; y++)
            {
               Spielfeld[x][y] = ".";
            }
        }
       bool SchleifenEnde = false;
       int xin, yin;
       do
       {
           cout<< "     1  2  3  4  5  6  7  8  9" << endl;
           for (y=0; y<Y; y++)
           {
               cout<< (char) ('A'+y) << "   ";
               for (x=0; x<X; x++)
               {
                   cout<< "   " << Spielfeld[x][y];
               }
               cout<< endl;
           }
          cin>> cx >> cy;
          xin = cx -'1';
          yin = cy -'A';
          if (xin>=0 && xin<9 && yin>=0 && yin<7)
          {
             Spielfeld[xin][yin] = 'x'
          }
          else
          {
              SchleifenEnde = true;
          }
       }while (!Schleifenende);
    }
    

    Nr2: Schiffe:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    const int X=9;
    const int Y=7;
    const int MaxSchiff=4;
    
    struct tSchiff
    {
        int x;
        int y;
        bool gefunden;
    };
    
    tSchiff Schiff[MaxSchiff];
    
    int main()
    {
    int i, j;
    bool neueZahl;
    
        srand(0);
        for(i=0; i<MaxSchiff; i++)
        {
            Schiff[i].gefunden = false;
            do
            {
                Schiff[i].x = rand() % X;
                Schiff[i].y = rand() % Y;
                neueZahl = true;
                for (j=0; j<i; j++)
                {
                    if (Schiff[j].x==Schiff[i].x
                       && Schiff[j].y==Schiff[i].y)
                    {
                        neueZahl = false;
                    }
                }
            } while (!neueZahl);
        }
        for (i=0; i<MaxSchiff; i++)
        {
            cout << Schiff[i].x << "," << Schiff[i].y << " ";
        }
        cout << std::endl;
    }
    

    Ich hoffe ich habe nichts falsches geschrieben und dass mir jemand helfen kann.

    EDIT by Phoemuex: cpp-Tags und Einrückung (in Zukunft bitte selber machen!)



  • Nr1: Spielfeld:

    #include <iostream> //Brauchst du für "cout und cin..." also Eingaben und Ausgaben
    using namespace std;
    //Zwei Konstante deklarieren (Die Werte können nicht geändert werden)
    const int X=9;
    const int Y=7;
    //Hauptprogramm
    int main()
    {
    //Ein 2D-Array deklarieren
    char Spielfeld[X][Y];
    //Zwei Variablen deklarieren vom Typ int (ganzzahl)
    int x, y;
    //Zwei Variablen deklarieren vom Typ Char (Ein Zeichen)
    char cx, cy;
        //Verschachtelte For-Schleifen, die anscheinend das Spielfeld zeichnen
        for (x=0; x<X; x++)
        {
            for (y=0; y<Y; y++)
            {
             Spielfeld[x][y] = ".";
            }
        }
    //Bool-Variable initialisieren mit false
    bool SchleifenEnde = false;
    // Wieder 2 int Variablen
    int xin, yin;
    // Eine Do Schleife
    do
    {
        cout<< "     1  2  3  4  5  6  7  8  9" << endl; //Gebe 1 2 3 4 5... in der Console aus
    //Wieder ne For-Schleife
        for (y=0; y<Y; y++)
        {
            cout<< (char) ('A'+y) << "   "; //Ausgeben: Die Zeichenkonstante 'A' um y erhöhen
            for (x=0; x<X; x++)
            {
                cout<< "   " << Spielfeld[x][y]; //Das ganze 2D-Array ausgeben
            }
            cout<< endl;
        }
    //Zwei Variablen einlesen
    cin>> cx >> cy;
    //Erklärt sich von selber
    xin = cx -'1';
    yin = cy -'A';
    
    if (xin>=0 && xin<9 && yin>=0 && yin<7)
    {
        Spielfeld[xin][yin] = 'x'
    }
    else
    {
        SchleifenEnde = true;
    }
    }
    while (!Schleifenende);
    } 
    
    //...........................................................
    

    Meinst du so erklären? Besser wäre es wenn du mitteilst, was du nicht verstehst.

    Lg Mentras



  • Ist das zufällig "Einstieg in C++"? 😃 😃



  • Ja ich habe Einstieg in C++ 😃
    und danke für deine Antwort, hat mir sehr geholfen.
    Genau so hab ich es gemeint 👍



  • Honky schrieb:

    Ja ich habe Einstieg in C++ 😃
    und danke für deine Antwort, hat mir sehr geholfen.
    Genau so hab ich es gemeint 👍

    Hätte auch gerne den 2. Quellcode gemacht, aber das ist ja ziemlich das selbe. (Außerdem weiß ich nicht was die lib <stdlib> macht x( )

    Lg Mentras



  • stdlib.h (bzw unter C++ cstdlib ) wird für die Funktion rand benötigt, die eine Zufallszahl zurückgibt. Bei jedem Aufruf des Programms wird die selbe (pseudo-zufällige) Zahlenfolge generiert. (Wobei das ein "Problem" ist, dass sich mit srand umschiffen lässt, wenn man zum Beispiel die Zeit als Parameter übergibt und somit den PNG jedesmal anders initialisiert.)



  • Ohhh, verstehe!

    Dank dir!


Anmelden zum Antworten