井字游戏设计一个算法
介绍 (Introduction)
Tic-tac-toe ,consisting of Xs and Os is a paper-and-pencil game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row is the winner.
井字游戏,由Xs和Os组成,是两个玩家X和O的纸笔游戏,他们轮流在3×3的网格中标记空格。 成功将三个标记放在水平,垂直或对角线上的玩家是获胜者。
Each player takes alternative turns. In order to win a player places three of their marks in a horizontal, vertical, or diagonal row. This article focuses on the development of a programmatic approach with its GUI visualization.
每个玩家轮流进行。 为了赢得玩家,将他们的三个标记放在水平,垂直或对角线上。 本文重点介绍具有GUI可视化功能的编程方法的开发。
方法 (Approaches)
The following are different ways of thinking about building the AI with incremental complexity :
以下是构建具有递增复杂性的AI的不同思考方式:
Random Placement method : In this approach, the marking is simply made by the AI randomly in any available cell. The downside is obvious, the AI is not interested in the game at all! But still it has to find out the available cells and track the termination the game. Here is the pseudocode for this approach :
随机放置方法 :在这种方法中,标记简单地由AI在任何可用单元格中随机进行。 缺点很明显,AI对游戏根本不感兴趣! 但是它仍然必须找出可用的单元并跟踪游戏的终止。 这是此方法的伪代码:
function ai_move(curr_state){
game_has_ended(curr_state)
l = [list of all blank cells]
r,c = select one at random
curr_state[r][c] = 'X'
game_has_ended(curr_state)
}function game_has_ended(curr_state){
if all cells are filled:
exit("Game is Drawn")
for each row or column in curr_state{
if row or column is filled with same mark:
exit(" Game is won ")
}
if diagonals are filled with same mark:
exit("Game is won ")}
2. Static Scoring method : Building on top of the previous approach, a priority score is assigned to each cell in the grid. The unmarked cell with the highest priority is marked in the next move. The middle cell has the highest priority followed by the corner and then the other cells, based on the degree of control in the game offered by them. Here is the pseudocode for this approach :
2. 静态评分方法 :在先前方法的基础上,将优先级分数分配给网格中的每个单元。 下一步将标记优先级最高的未标记单元。 中间单元的优先级最高,其次是角球,然后是其他单元,具体取决于它们在游戏中提供的控制程度。 这是此方法的伪代码:
function ai_move(curr_state){
game_has_ended(curr_state)
r,c = select cell position of highest priority
curr_state[r][c] = 'X'
game_has_ended(curr_state)
}sample static scoring : |3 | 1 |3 |
|1 | 7 |1 |
|3 | 1 |3 |
3. Brute Force method : The disadvantages of both the methods above is that, they miss to read the opponent and fail to play moves to advantage. So, this method is built on the above methods. When the opponent has two markings in a row or column or diagonal, it is blocked. Otherwise, static scores are used to