Tic-Tac-Toe



  • Hallo ich habe gerade mal bisschen Programmiert und wollte fragen was ihr zu meinem Programm sagt.
    -Was kann ich verbessern
    -Wie schreibe ich es kürzer
    Ps. Ich programmiere seit 3 Monaten.

    #include <iostream>
    #include <time.h>
    #include <cstdlib>
    #include <string>
    #include <ciso646>
    #include <stdlib.h>
    using namespace std;
    
        string ol = "1";
        string om = "2";
        string ObenR = "3";
        string ml = "4";
        string mm = "5";
        string mr = "6";
        string ul = "7";
        string um = "8";
        string ur = "9";
        int k1 = 0;
        int k2 = 0;
        int k3 = 0;
        int k4 = 0;
        int k5 = 0;
        int k6 = 0;
        int k7 = 0;
        int k8 = 0;
        int k9 = 0;
        string player1;
        string player2;
        string eingabe;
        string eingabe2;
        int g = 0;
        int j = 0;
        int i = 0;
        int r = 0;
        string Nochmal;
    
    void Spieler(){
        cout << "Wie heisst Spieler 1?" << endl;
        cin >> player1;
        cout << "Wie heisst Spieler 2?" << endl;
        cin >> player2;
        r++;
    }
    void Clear(){
        k9 = 0;
        k8 = 0;
        k7 = 0;
        k6 = 0;
        k5 = 0;
        k4 = 0;
        k3 = 0;
        k2 = 0;
        k1 = 0;
        ol = "1";
        om = "2";
        ObenR = "3";
        ml = "4";
        mm = "5";
        mr = "6";
        ul = "7";
        um = "8";
        ur = "9";
        g = 0;
        j = 0;
        i = 0;
        system("CLS");
        cout << ol << " | " << om << " | " << ObenR << endl;
        cout << "---------" << endl;
        cout << ml << " | " << mm << " | " << mr << endl;
        cout << "---------" << endl;
        cout << ul << " | " << um << " | " << ur << endl;
    }
    void gewinner(){
        system("CLS");
        cout << ol << " | " << om << " | " << ObenR << endl;
        cout << "---------" << endl;
        cout << ml << " | " << mm << " | " << mr << endl;
        cout << "---------" << endl;
        cout << ul << " | " << um << " | " << ur << endl;
    
        if (ol == om && om == ObenR){
            if(ol == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ol == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
                }
        }
        if (ml == mm && mm == mr){
            if(ml == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ml == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (ul == um && um == ur){
            if(ul == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ul == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (ol == mm && mm == ur){
            if(ol == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ol == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (ObenR == mm && mm == ul){
            if(ObenR == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ObenR == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (ol == ml && ml == ul){
            if(ol == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ol == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (om == mm && mm == um){
            if(om == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(om == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
        if (ObenR == mr && mr == ur){
            if(ObenR == "X"){
                cout << player1 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
            else if(ObenR == "O"){
                cout << player2 << " hat gewonnen" << endl;
                i++;
                cout << "Wollt ihr nochmal Spielen (JA/Nein)" <<endl;
                cin >> Nochmal;
                if(Nochmal == "JA" || Nochmal == "Ja" || Nochmal == "J" || Nochmal == "j" || Nochmal == "ja"){
                    Clear();
                }
                else if(Nochmal == "NEIN " || Nochmal == "Nein" || Nochmal == "nein" || Nochmal == "N" || Nochmal == "n"){
                g = 1;
                j = 1;
                i = 1;
                r = 1;
                }
            }
        }
    }
    int main(){
    
        while(r == 0){
            Spieler();
        }
        while(i == 0){
            
            system("CLS");
            cout << ol << " | " << om << " | " << ObenR << endl;
            cout << "---------" << endl;
            cout << ml << " | " << mm << " | " << mr << endl;
            cout << "---------" << endl;
            cout << ul << " | " << um << " | " << ur << endl;
    
        while(j == 0){
            cout << player1 << " ist dran" << endl;
            cout << "Wo willst du dein Kreuz hinsetzen?" << endl;
            cin >> eingabe;
            g = 0;
            if(eingabe == "1" && k1 == 0){
                ol = "X";
                k1 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "2" && k2 == 0){
                om = "X";
                k2 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "3" && k3 == 0){
                ObenR = "X";
                k3 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "4" && k4 == 0){
                ml = "X";
                k4 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "5" && k5 == 0){
                mm = "X";
                k5 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "6" && k6 == 0){
                mr = "X";
                k6 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "7" && k7 == 0){
                ul = "X";
                k7 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "8" && k8 == 0){
                um = "X";
                k8 = 1;
                j++;
                gewinner();
            }
            if(eingabe == "9" && k9 == 0){
                ur = "X";
                k9 = 1;
                j++;
                gewinner();
            }
            else{
                cout << "Bitte gib etwas anders ein!!" <<endl;
            }
        }
        system("CLS");
        cout << ol << " | " << om << " | " << ObenR << endl;
        cout << "---------" << endl;
        cout << ml << " | " << mm << " | " << mr << endl;
        cout << "---------" << endl;
        cout << ul << " | " << um << " | " << ur << endl;
    
        while(g == 0){
        j = 0;
        cout << player2 << " ist dran" << endl;
        cout << "Wo willst du dein Kreis hinsetzen?" << endl;
        cin >> eingabe2;
            if(eingabe2 == "1" && k1 == 0){
                ol = "O";
                k1 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "2" && k2 == 0){
                om = "O";
                k2 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "3" && k3 == 0){
                ObenR = "O";
                k3 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "4" && k4 == 0){
                ml = "O";
                k4 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "5" && k5 == 0){
                mm = "O";
                k5 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "6" && k6 == 0){
                mr = "O";
                k6 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "7" && k7 == 0){
                ul = "O";
                k7 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "8" && k8 == 0){
                um = "O";
                k8 = 1;
                g++;
                gewinner();
            }
            if(eingabe2 == "9" && k9 == 0){
                ur = "O";
                k9 = 1;
                g++;
                gewinner();
            }
            else{
                cout << "Bitte gib etwas anders ein!!" <<endl;
            }
            }
        }
    }
    


  • -Was kann ich verbessern

    • Sprechende Variablen- und Funktionsnamen verwenden (g, j, i, r?)
    • Nicht Deutsch und Englisch im Code mischen (Clear vs. den ganzen Rest der deutsche Bezeichner verwendet)
    • Code-Duplizierung vermeiden
    • Code korrigieren: Die Ausgabe von "Bitte gib etwas anders ein!!" funktioniert nur für Feld 9, wenn etwas anderes eingegeben wird was bereits belegt ist, kommt keine Meldung.

    -Wie schreibe ich es kürzer

    Indem du ein Array für die Positionen verwendest statt 9 einzelne Variablen. Entweder ein 2D Array mit 3x3 Elementen oder einfach ein 1D Array mit 9 Elementen.

    Es ist auch nicht nötig zwei getrennte Arrays bzw. Sets von je 9 Variablen zu verwenden - eines um abzuspeichern ob das Feld belegt ist und das andere um abzuspeichern von welchem Spieler es belegt ist. Du kannst z.B. einfach ein Leerzeichen für "Feld frei" verwenden, und dann eben "X" und "O" für wenn das Feld von einem Spieler belegt ist.



  • -Was kann ich verbessern

    1. Keine nutzlosen Includes.
    2. Verwende ein Array! Sowas in der Art wie std::array<std::array<char, 3>, 3> board (ein 3x3-Array). - das clear() wird damit zu einem einfachen board = {}.
    3. Verwende keine globalen Variablen
    4. Verwende Funktionen (mit Parametern!, siehe auch 3)

    -Wie schreibe ich es kürzer

    Diese Frage ist missverständlich. Kürzer ist nicht immer besser. Allerdings gilt: wiederhole dich nicht, d.h. implementiere nicht das Gleiche (oder ähnliche Dinge) mehrfach.


  • Gesperrt

    Sehr gutes Programm, habe mich selber mal rangesetzt aber es nicht geschafft, saubere Lösung und die while Schleifen wurden gut gesetzt. Für 3 Monate ist das echt schon gut, ich glaube du hast echt das Zeug ein Programmierer zu werden!



  • @Labude_Fabian sagte in Tic-Tac-Toe:

    Sehr gutes Programm, habe mich selber mal rangesetzt aber es nicht geschafft, saubere Lösung und die while Schleifen wurden gut gesetzt. Für 3 Monate ist das echt schon gut, ich glaube du hast echt das Zeug ein Programmierer zu werden!

    Sehr guter Kommentar. Für den 2. Beitrag ist das echt schon gut. Ich glaube, Du hast echt das Zeug, ein Dummschwätzer zu werden.


  • Gesperrt

    @Belli
    Für 3 Monate ist das echt gut, wenn du das nicht so sieht solltest du vielleicht nochmal überdenken was du schreibst.
    Für Arschgeigen ist kein Platz bei der C++ Community



  • Hrhr, ich schnapp' mir schon mal eine Tüte Popcorn ... nachdem ich meine Fremdschämphase überwunden habe 😂



  • @Labude_Fabian so eine Vulgäre Schreibweise möchte ich unter meinem Schönen Programm nicht sehen


  • Gesperrt

    @Hubilady Dein Programm ist ein vulgäre Schreibweise



  • Solche Variablen wie
    @Hubilady sagte in Tic-Tac-Toe:

    int k1 = 0;
    int k2 = 0;
    int k3 = 0;
    int k4 = 0;
    int k5 = 0;
    int k6 = 0;
    int k7 = 0;
    int k8 = 0;
    int k9 = 0;

    deuten klar auf die Verwendung eines Arrays hin.

    Hast du ein Nummern-Feld rechts auf deiner Tastatur?
    Schau mal, wie da die Belegung ist.



  • @Hubilady sagte in Tic-Tac-Toe:

    Wie schreibe ich es kürzer?

    Du solltest Programme auch verständlich schreiben und dokumentieren. Denn wozu dient beispielsweise k1 oder k2? Oder wo ist das Spielfeld definiert? Sonst weißt du in 4 Wochen nicht mehr, was du programmiert hast.

    Als kleines Gegenbeispiel habe ich dir mal das Spielfeld als Klasse definiert und dokumentiert.

    // MatchField.h
    
    /**
     * @brief Zustand eines einzelnen Feldes 
     */
    enum class FieldState
    {
        EMPTY,              ///< Feld ist leer
        STONE_PLAYER_1,     ///< Auf dem Feld liegt ein Stein von Spieler 1
        STONE_PLAYER_2      ///< Auf dem Feld liegt ein Stein von Spieler 2
    };
    
    
    /**
     * @class MatchField
     * @brief Spielfeld auf welchem Tic Tac Toe gespielt wird
     */
    class MatchField
    {
    public:
        FieldState mField[3][3];   ///< Spielfeld
        
    public:
        /**
         * @brief Erzeugt ein leeres Spielfeld
         */
        MatchField();
    
        /**
         * @brief Entfernt alle Steine vom Feld
         */
        void Clear();
        
        /**
         * @brief Überprüft ob ein Spieler gewonnen hat
         * @param ID    [in] ID des Spielers: 1 = erster Spieler, 2 = zweiter Spieler
         * @return true, wenn der Spieler mit der ID gewonnen hat
         */
        bool PlayerWon(unsigned int ID) const;
    };
    


  • @Belli sagte in Tic-Tac-Toe:

    Sehr guter Kommentar.

    Das war doch ein lustiger sarkastischer Kommentar!


Anmelden zum Antworten