我是编码的新手,我正在尝试制作井字游戏。我还没结束但是我被困住了,我希望程序在已经占用空间的情况下打印错误。但是现在,它只是将原始令牌与新令牌交换。就像在一个空间中有一个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;
}
}
答案 0 :(得分:1)
这似乎是validPosition函数要做的事情-为什么不将其移到设置部分上方并显示错误,而不是先设置值然后检查?
此外,validPosition会为您设置值-只要您给它正确的x,y