C ++井字游戏。切换空间而不是错误消息

时间:2018-12-19 18:25:29

标签: c++

我是编码的新手,我正在尝试制作井字游戏。我还没结束但是我被困住了,我希望程序在已经占用空间的情况下打印错误。但是现在,它只是将原始令牌与新令牌交换。就像在一个空间中有一个X并且在两个空间中有两个玩家一样,O将替换X。我在单独的头文件中具有函数的声明。任何批评都会受到赞赏,无论好坏。

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


    bool TicTacToe::validPosition(int x, int y, int currentplayer){
        if(map[x][y] != ' '){
            return false;
        }
        map[y][x] = currentplayer;
        return true;

    }

    void TicTacToe::playgame() {
        int player1move;
        int player2move;
        int currentplayer;
        generateGrid();

        int x, y;

        while(gameover == false) {
            tictacToeMap();

                std::cout << "Go player one" << std::endl;
                std::cin >> player1move;


                if (player1move == 1) {
                    map[0][0] = 'x';
                } else if (player1move == 2) {
                    map[0][1] = 'x';
                } else if (player1move == 3) {
                    map[0][2] = 'x';
                } else if (player1move == 4) {
                    map[1][0] = 'x';
                } else if (player1move == 5) {
                    map[1][1] = 'x';
                } else if (player1move == 6) {
                    map[1][2] = 'x';
                } else if (player1move == 7) {
                    map[2][0] = 'x';
                } else if (player1move == 8) {
                    map[2][1] = 'x';
                } else if (player1move == 9) {
                    map[2][2] = 'x';
                }
                tictacToeMap();


                std::cout << "Go player two" << std::endl;
                std::cin >> player2move;
                if (player2move == 1) {
                    map[0][0] = 'o';
                } else if (player2move == 2) {
                    map[0][1] = 'o';
                } else if (player2move == 3) {
                    map[0][2] = 'o';
                } else if (player2move == 4) {
                    map[1][0] = 'o';
                } else if (player2move == 5) {
                    map[1][1] = 'o';
                } else if (player2move == 6) {
                    map[1][2] = 'o';
                } else if (player2move == 7) {
                    map[2][0] = 'o';
                } else if (player2move == 8) {
                    map[2][1] = 'o';
                } else if (player2move == 9) {
                    map[2][2] = 'o';
                }

            }

            if (validPosition(x, y, currentplayer) == true) {
                std::cout << "Cant go there" << std::endl;
            } else {
                if (currentplayer == player1move) {
                    currentplayer = player2move;
                } else {
                    currentplayer = player1move;
                }
        }


    }



    void TicTacToe::generateGrid() {
        int number = 1;

        for(int x = 0; x < GRID_SIZE; x++){
            for(int y = 0; y < GRID_SIZE; y++){
                map[x] [y] = std::to_string(number).c_str()[0];
                number += 1;
            }
        }
    }




    void TicTacToe::tictacToeMap(){



        std::cout << std:: endl;

        for(int x = 0; x < GRID_SIZE; x++){
            for(int y = 0; y < GRID_SIZE; y++){
                std::printf(" %c ",  map[x][y]) ;
            }
            std::cout << std:: endl;
        }

    }

1 个答案:

答案 0 :(得分:1)

这似乎是validPosition函数要做的事情-为什么不将其移到设置部分上方并显示错误,而不是先设置值然后检查?

此外,validPosition会为您设置值-只要您给它正确的x,y