简体   繁体   English

在Tic Tac Toe游戏中需要有关for循环的帮助

[英]Need assistance with a for loop in Tic Tac Toe game

My program is exiting without iterating. 我的程序没有迭代就退出了。 It automatically goes to "YOU WON". 它会自动转到“你是谁”。 Without the champion function the program runs fine. 没有冠军功能,程序运行正常。 Its probably some obvious error Im missing. 它可能是一些明显的错误我失踪了。 If anyone could please I would greatly appreciate it. 如果有人愿意,我会非常感激。

#include <iostream>
#include <string>

#define GRID_SIZE 3

class TicTacToe {
private:
    char map[GRID_SIZE][GRID_SIZE];

public:

    void champion() {
        const char *possiblities[8]{
                "123"
                "456"
                "789"
                "147"
                "159"
                "258"
                "369"
                "753"
        };

        for (int i = 0; i < 8; i++) {
            bool winner = true;
            char previous_pos = '0';
            const char *possible_moves = possiblities[i];

            for (int index = 0; index < GRID_SIZE; index++) {
                char character = possible_moves[i];
                int entered_num = character - '0';
                int grid_space = entered_num - 1;
                int row = index / GRID_SIZE;
                int col = index % GRID_SIZE;

                char grid_coordinate = map[row][col];

                if (previous_pos == '0') {
                    previous_pos = grid_coordinate;
                } else if
                        (previous_pos == grid_coordinate) {
                    continue;
                } else {
                    winner = false;
                    break;
                }
            }
            if (winner = true) {
                std::cout << "YOU WON" << std::endl;
                exit(0);
                break;
            }

        }


    }

    void playgame() {
        std::string input;

        while (true) {
            std::cout << "Go player one" << std::endl;
            getline(std::cin, input);
            if (input != " ") {
                char entered = input.c_str()[0];

                if (entered >= '1' && entered <= '9') {
                    int entered_num = entered - '0';
                    int index = entered_num - 1;
                    int row = index / 3;
                    int col = index % 3;
                    char grid_position = map[row][col];

                    if (grid_position == 'X' || grid_position == 'O') {
                        std::cout << "Space taken. Try again" << std::endl;
                    } else {
                        map[row][col] = (char) 'X';
                        break;
                    }

                } else {
                    std::cout << "Only numbers 1 - 9" << std::endl;
                }
            } else {
                std::cout << "Have to enter something, try again" << std::endl;
            }


        }
    }

    void 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 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;
        }

    }


    TicTacToe() {
        generateGrid();
        while (true) {
            tictacToeMap();
            playgame();
            champion();


        }
    }
};


int main() {

    TicTacToe tic;
    tic.playgame();


    return 0;


}

The problem is here: 问题出在这里:

if (winner = true) {
                std::cout << "YOU WON" << std::endl;
                exit(0);
                break;
            }

You probably meant: 你可能意味着:

if (winner == true) {
                std::cout << "YOU WON" << std::endl;
                exit(0);
                break;
            }

First, do what Max Meijer said, by replacing if(winner = true) with if(winner == true) . 首先,做Max Meijer所说的,用if(winner == true)替换if(winner = true) if(winner == true) But the program is still broken. 但该计划仍然被打破。 The problem is that in your string array, you are not separating each string with a comma, so when my debugger hits const char *possible_moves , it ends up just assigning the entire array concatenated together. 问题是在你的字符串数组中,你没有用逗号分隔每个字符串,所以当我的调试器访问const char *possible_moves ,它最终只是将整个数组连接在一起。 So just separate each string in the possibilities array with a comma, like so: 所以只需用逗号分隔可能性数组中的每个字符串,如下所示:

const char *possiblities[8]{
                "123",
                "456",
                "789",
                "147",
                "159",
                "258",
                "369",
                "753"
        };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM