C++ Tic-Tac-Toe mit Klassen

Das Spiel zeigt die matrix, aber nicht update-die aktuelle Bewegung.
Wie kann ich das tun?

Hier zeige ich den code habe ich bis jetzt.
Ich definiere eine matrix für den Vorstand.
Die Funktionen zeichnen das board, erhalten den Auszug aus dem player und schaltet den Kurven.

#ifndef TICTACTOE_H
#define TICTACTOE_H

class TicTacToe
{
private:
    char board[3][3];

public:
    void DrawBoard();
    void PrintBoard();
    void GetMove(int move);
    void TogglePlayer(char player);
    bool DetermineDraw();
};

#endif

Hier ist die Umsetzung-Datei:
Meine Funktion zum zeichnen der platine zeigt die matrix, aber nicht update bewegt.

#include <iostream>
#include "TicTacToe.h"

using namespace std;


void TicTacToe::DrawBoard()
{
    system("cls");
    cout <<"\tWelcome to the Classes Tic Tac Toe! \n";
    char board[3][3] =
    { 
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
    };

    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            cout << board[i][j] << " ";
        }
        cout << endl;
    }
}


void TicTacToe::GetMove(int move)
{
    char player = 'X';
    cout <<"\nEnter the number of the field you would like to move:\n";
    cin >> move;

    if( move == 1)
    {
        board[0][0] = player;
    }
    else if(move == 2)
    {
        board[0][1] = player;
    }
    else if(move == 3)
    {
        board[0][2] = player;
    }
    else if(move == 4)
    {
        board[1][0] = player;
    }
    else if(move == 5)
    {
        board[1][1] = player;
    }
    else if(move == 6)
    {
        board[1][2] = player;
    }
    else if(move == 7)
    {
        board[2][0] = player;
    }
    else if(move == 8)
    {
        board[2][1] = player;
    }
    else if(move == 9)
    {
        board[2][2] = player;
    }

}

void TicTacToe::TogglePlayer(char player)
{
    if (player == 'X')
        player = 'O';
    else if(player == 'O')
        player = 'X';
}

bool TicTacToe::DetermineDraw()
{
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            if(board[i][j] == 'X' && board[i][j] == 'O')
                return true;
            else 
                return false;
        }
    }
}

Hier ist die Haupt-Datei, ich werde halten looping durch das Spiel, während es ist nicht eine Attraktion.
Ich weiß nicht, warum das bewegen ist nicht auf der platine dargestellt.

 #include <iostream>
#include "TicTacToe.h"

using namespace std;

int main()
{
    TicTacToe game;
    char player = 'X';
    while(game.DetermineDraw() == false)
    {
        game.DrawBoard();
        game.GetMove(player);
        game.TogglePlayer(player);
    }

    system("pause");
}
  • Wenn Sie den debugger, welche Zeile das Problem verursacht?
  • board[move/3][move%3] = player: entfernen Sie Ihre if Aussagen.
  • Ihre TogglePlayer Funktion ändert den kopieren der player parameter, dann beendet. Die original player variable wird nicht geändert. Meinst du zum Verweis übergeben? Oder waren Sie Planung auf eine player variable in Ihrem TicTacToe Klasse.
  • Übergeben Sie das player-symbol, um Ihre GetMove Funktion, aber die Funktion erwartet wird ein Brett Platz Nr.
  • Ihre GetMove Methode immer Orte, die der Spieler X und nie O.
  • Yep, ein debugger würde dir ungemein weiterhelfen, finden diese Themen. Mit Papier und Bleistift, zeichnen Sie eine Tabelle für die Variablen und die Ausführung jeder Anweisung würde auch helfen.
  • Ihre DetermineDraw Methode macht nie mehr als eine iteration, da beide Klauseln die if - Anweisung zurück. Ein weiteres Problem, das mit einem debugger finden kann.
  • Danke für Sie Antwort, aber ich weiß nicht, wie Sie das update-board.
  • In Ihrem DetermineDraw Methode, wie kann der Ausdruck (board[i][j] == 'X') && (board[i][j] == 'O') überhaupt wahr sein? Der Schlitz in der platine kann nie gleich beide Werte. Vielleicht haben Sie gedacht, um die Verwendung ||? Mit einem debugger helfen würde, Sie fangen diese ein. Sind Sie immer der Hinweis noch? Wenn Sie nicht wissen, wie Sie den debugger verwenden, lernen.
  • Ja, ich weiß, wie Sie den debugger, und ja, ich hätte ||

Schreibe einen Kommentar