Эй, просто так получилось, что не так давно я написал «игру» в стиле c ++ tic toe для сообщения в блоге.
http://alongbutsimplenameformyblog.blogspot.com/2010/08/tic-tac-toe.html
Здесь я старался изо всех силписать компактный, но читаемый код и помнить о производительности.Я получил программу из 32 строк кода.Единственное, чего я не делаю, так это позволяю игре быть «играбельной».
Если вы посмотрите на мой код, вы сможете увидеть способ организации вашей игры в многомерный массив.,То, как вы читаете это (если вы не в курсе, извините, если я говорю вам то, что вы знаете):
arrayName[rowNumber][columnNumber];
Итак, чтобы поменять верхнюю правую рамку крестика-нолика.'x' вы бы сказали:
arrayName[0][2] = 'x';
Когда вы используете массивы, имейте в виду, что он начинается с элемента 0, а не с элемента 1. Это то, что я забыл при запуске, по крайней мере.
Итак, надеюсь, прочитав мой код, вы сможете увидеть, как довольно легко проверить условие выигрыша в функции.Если у вас есть вопросы о том, как работает мой код, или о том, как реализовать это, не стесняйтесь.Я вернусь периодически.Кроме того, поскольку учебный год начинается осенью, я должен больше писать в блоге о таких вещах, когда я помогаю студентам первого и второго курса в моей программе.Так что не стесняйтесь в закладки или подписаться.
#include < iostream >
const char grid[3][3] = {'x', ' ', 'o', 'o','x', 'o', 'x', 'x', 'o'};
inline const bool checkLine(char x, char y, char z) {
return (x == y && y == z && x != ' ');
}
inline const bool checkWin(){
bool a = 0, b = 0;
for(unsigned char i = 0; i < 3; ++i)
if(checkLine(grid[i][0], grid[i][1], grid[i][2]) || checkLine(grid[0][i], grid[1][i], grid[2][i]))
return true;
for(unsigned char i = 0; i < 2; ++i)
if(checkLine(grid[i == 0 ? 0 : 2][0], grid[1][1], grid[i == 0 ? 2 : 0][2]))
return true;
return false;
}
int main(){
for (unsigned char i = 0; i < 3; ++i) {
for (unsigned char j = 0; j < 3; ++j)
std::cout << grid[i][j];
std::cout << "\n";
}
if (checkWin())
std::cout << "WINNER\n";
return 0;
}