游戏规则
- 游戏将在两个人之间进行(在这个程序中,人与计算机之间)。
- 其中一位玩家选择“O”,另一位玩家选择“X”来标记各自的单元格。
- 游戏从其中一名玩家开始,当其中一名玩家有一整行/列/对角线填充他/她各自的字符(“O”或“X”)时,游戏结束。
- 如果没有人获胜,则称该游戏为平局。
执行
在我们的程序中,计算机和人类采取的动作是随机选择的。我们为此使用 rand()函数。程序中还能做什么?
由于移动是随机选择的,因此双方都没有以最佳方式播放该程序。该程序可以轻松修改,以便两个玩家都能以最佳方式进行游戏(这将属于人工智能类别)。也可以修改程序,以便用户自己提供输入(使用 scanf() 或 cin)。
上述更改留给读者作为练习。制胜策略——一个有趣的事实
如果两个球员都发挥最佳,那么注定你永远不会输(“虽然比赛仍然可以平局”)。先玩还是后玩都无所谓。换种说法——“两个高手总会抽奖”。
这不是很有趣吗?// A C++ Program to play tic-tac-toe #include
using namespace std; #define COMPUTER 1 #define HUMAN 2 #define SIDE 3 // Length of the board // Computer will move with 'O' // and human with 'X' #define COMPUTERMOVE 'O' #define HUMANMOVE 'X' // A function to show the current board status void showBoard(char board[][SIDE]) { printf("\n\n"); printf("\t\t\t %c | %c | %c \n", board[0][0], board[0][1], board[0][2]); printf("\t\t\t--------------\n"); printf("\t\t\t %c | %c | %c \n", board[1][0], board[1][1], board[1][2]); printf("\t\t\t--------------\n"); printf("\t\t\t %c | %c | %c \n\n", board[2][0], board[2][1], board[2][2]); return; } // A function to show the instructions void showInstructions() { printf("\t\t\t Tic-Tac-Toe\n\n"); printf("Choose a cell numbered from 1 to 9 as below" " and play\n\n"); printf("\t\t\t 1 | 2 | 3 \n"); printf("\t\t\t--------------\n"); printf("\t\t\t 4 | 5 | 6 \n"); printf("\t\t\t--------------\n"); printf("\t\t\t 7 | 8 | 9 \n\n"); printf("-\t-\t-\t-\t-\t-\t-\t-\t-\t-\n\n"); return; } // A function to initialise the game void initialise(char board[][SIDE], int moves[]) { // Initiate the random number generator so that // the same configuration doesn't arises srand(time(NULL)); // Initially the board is empty for (int i=0; i 输出:
Tic-Tac-Toe Choose a cell numbered from 1 to 9 as below and play 1 | 2 | 3 -------------- 4 | 5 | 6 -------------- 7 | 8 | 9 - - - - - - - - - - COMPUTER has put a O in cell 6 | | -------------- | | O -------------- | | HUMAN has put a X in cell 7 | | -------------- | | O -------------- X | | COMPUTER has put a O in cell 5 | | -------------- | O | O -------------- X | | HUMAN has put a X in cell 1 X | | -------------- | O | O -------------- X | | COMPUTER has put a O in cell 9 X | | -------------- | O | O -------------- X | | O HUMAN has put a X in cell 8 X | | -------------- | O | O -------------- X | X | O COMPUTER has put a O in cell 4 X | | -------------- O | O | O -------------- X | X | O COMPUTER has won
这个游戏的一个有趣的变体
如上所述,如果两个有经验的玩家在玩井字游戏,那么游戏总是会平局。
该游戏还有另一种病毒式变体——终极井字游戏,旨在让普通的井字游戏更有趣且更难预测。
看看这里的游戏 – Link1 Link2上面的文章实现了简单的 Tic-Tac-Toe,其中移动是随机进行的。请参阅以下文章以了解如何进行最佳移动。
博弈论中的极小极大算法第 3 组(井字棋 AI – 寻找最佳动作)关于“赢/永不输”策略的精彩讨论
知乎
维基百科如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。