Нужна помощь с программой C++ tic tac toe
Я хочу, чтобы программа печатала "вы выиграли", когда задается любой из экземпляров функции champion (). Он показывает победителя только тогда, когда вводится "123". Всякий раз, когда три X отображаются в другом месте, программа продолжается. Например, если три X заданы по диагонали, программа все равно будет продолжаться. Начинающий программист так что любая критика очень ценится.
#include <iostream> #include <string> #include<cstdio> #include <stdlib.h> #define GRID_SIZE 3 class TicTacToe { private: char map[GRID_SIZE][GRID_SIZE]; public: void computers_turn() { while (true) { int choice = (rand() % 9) + 1 ; int row = choice / 3; int col = choice % 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) 'O'; break; } } } void champion() { const char *possiblities[8] = { "123", "456", "789", "147", "258", "369", "159", "753" }; for (int i = 0; i < 8; i++) { char previous_pos = '0'; const char *possible_moves = possiblities[i]; bool winner = true; for (int index = 0; index < GRID_SIZE; index++) { char character = possible_moves[index]; 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 ) { puts("You win"); exit(0); } } } void playgame() { std::string input; while (true) { puts( "Go player one"); 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(); champion(); playgame(); } } }; int main( int argc, char *argv[] ) { TicTacToe letsplat; return 0; }
Что я уже пробовал:
Я перепробовал все, что я знаю, чтобы исправить это, но я не могу понять это.