游戏规则
- 该游戏将在两个人之间进行(在此程序中,人与计算机之间)。
- 一个玩家选择“ 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
这个游戏的一个有趣的变体
如上所述,如果两个经验丰富的玩家正在玩井字游戏,则游戏将始终平局。
该游戏还有另一种病毒变种,即Ultimate Tic-Tac-Toe,目的是使普通的Tic-Tac-Toe更加有趣且难以预测。
在这里看看游戏-Link1 Link2上面的文章实现了简单的井字游戏,其中随机移动。请参阅下面的文章,以了解如何进行最佳移动。
博弈论中的极小极大算法第三组(井字游戏AI-寻找最佳动作)关于“赢/不输”战略的精彩讨论
Quora
维基百科