先决条件: 博弈论中的极小极大算法 如上面的文章所示,每个叶节点都有一个与之关联的值。我们将这个值存储在一个数组中。但在现实世界中,当我们创建一个玩井字游戏、国际象棋、双陆棋等的程序时,我们需要实现一个函数,根据棋子在棋盘上的位置计算棋盘的价值。这个函数通常被称为 评价函数 有时也称为启发式函数。 每种游戏的评估功能都是独一无二的。在这篇文章中,我们讨论了游戏Tic-Tac-Toe的评估函数。评估函数背后的基本思想是,如果 最大化器 如果出现以下情况,则为该董事会的低值: 最小化 轮到你了。 对于这种情况,让我们考虑一下 十、 作为 最大化器 和 O 作为 最小化 . 让我们构建我们的评估功能:
- 如果X在棋盘上获胜,我们给它一个+10的正值。
- 如果O在棋盘上获胜,我们给它一个负值-10。
- 如果没有人赢,或者比赛结果是平局,那么我们给出+0的值。
我们可以选择除10以外的任何正值/负值。为了简单起见,我们选择了10。为了简单起见,我们将用小写字母“x”和小写字母“o”来代表玩家,用下划线“”来代表棋盘上的空白。 如果我们将电路板表示为3×3 2D字符矩阵,如char board[3][3];然后我们必须检查每一行,每一列和对角线,以检查是否有任何一个球员在一行中得到了3。
C++
// C++ program to compute evaluation function for // Tic Tac Toe Game. #include<stdio.h> #include<algorithm> using namespace std; // Returns a value based on who is winning // b[3][3] is the Tic-Tac-Toe board int evaluate( char b[3][3]) { // Checking for Rows for X or O victory. for ( int row = 0; row<3; row++) { if (b[row][0]==b[row][1] && b[row][1]==b[row][2]) { if (b[row][0]== 'x' ) return +10; else if (b[row][0]== 'o' ) return -10; } } // Checking for Columns for X or O victory. for ( int col = 0; col<3; col++) { if (b[0][col]==b[1][col] && b[1][col]==b[2][col]) { if (b[0][col]== 'x' ) return +10; else if (b[0][col]== 'o' ) return -10; } } // Checking for Diagonals for X or O victory. if (b[0][0]==b[1][1] && b[1][1]==b[2][2]) { if (b[0][0]== 'x' ) return +10; else if (b[0][0]== 'o' ) return -10; } if (b[0][2]==b[1][1] && b[1][1]==b[2][0]) { if (b[0][2]== 'x' ) return +10; else if (b[0][2]== 'o' ) return -10; } // Else if none of them have won then return 0 return 0; } // Driver code int main() { char board[3][3] = { { 'x' , '_' , 'o' }, { '_' , 'x' , 'o' }, { '_' , '_' , 'x' } }; int value = evaluate(board); printf ( "The value of this board is %d" , value); return 0; } |
JAVA
// Java program to compute evaluation function for // Tic Tac Toe Game. class GFG { // Returns a value based on who is winning // b[3][3] is the Tic-Tac-Toe board static int evaluate( char b[][]) { // Checking for Rows for X or O victory. for ( int row = 0 ; row < 3 ; row++) { if (b[row][ 0 ] == b[row][ 1 ] && b[row][ 1 ] == b[row][ 2 ]) { if (b[row][ 0 ] == 'x' ) return + 10 ; else if (b[row][ 0 ] == 'o' ) return - 10 ; } } // Checking for Columns for X or O victory. for ( int col = 0 ; col < 3 ; col++) { if (b[ 0 ][col] == b[ 1 ][col] && b[ 1 ][col] == b[ 2 ][col]) { if (b[ 0 ][col] == 'x' ) return + 10 ; else if (b[ 0 ][col] == 'o' ) return - 10 ; } } // Checking for Diagonals for X or O victory. if (b[ 0 ][ 0 ] == b[ 1 ][ 1 ] && b[ 1 ][ 1 ] == b[ 2 ][ 2 ]) { if (b[ 0 ][ 0 ] == 'x' ) return + 10 ; else if (b[ 0 ][ 0 ] == 'o' ) return - 10 ; } if (b[ 0 ][ 2 ] == b[ 1 ][ 1 ] && b[ 1 ][ 1 ] == b[ 2 ][ 0 ]) { if (b[ 0 ][ 2 ] == 'x' ) return + 10 ; else if (b[ 0 ][ 2 ] == 'o' ) return - 10 ; } // Else if none of them have won then return 0 return 0 ; } // Driver code public static void main(String[] args) { char board[][] = { { 'x' , '_' , 'o' }, { '_' , 'x' , 'o' }, { '_' , '_' , 'x' } }; int value = evaluate(board); System.out.printf( "The value of this board is %d" , value); } } // This code is contributed by PrinciRaj1992 |
Python3
# Python3 program to compute evaluation # function for Tic Tac Toe Game. # Returns a value based on who is winning # b[3][3] is the Tic-Tac-Toe board def evaluate(b): # Checking for Rows for X or O victory. for row in range ( 0 , 3 ): if b[row][ 0 ] = = b[row][ 1 ] and b[row][ 1 ] = = b[row][ 2 ]: if b[row][ 0 ] = = 'x' : return 10 else if b[row][ 0 ] = = 'o' : return - 10 # Checking for Columns for X or O victory. for col in range ( 0 , 3 ): if b[ 0 ][col] = = b[ 1 ][col] and b[ 1 ][col] = = b[ 2 ][col]: if b[ 0 ][col] = = 'x' : return 10 else if b[ 0 ][col] = = 'o' : return - 10 # Checking for Diagonals for X or O victory. if b[ 0 ][ 0 ] = = b[ 1 ][ 1 ] and b[ 1 ][ 1 ] = = b[ 2 ][ 2 ]: if b[ 0 ][ 0 ] = = 'x' : return 10 else if b[ 0 ][ 0 ] = = 'o' : return - 10 if b[ 0 ][ 2 ] = = b[ 1 ][ 1 ] and b[ 1 ][ 1 ] = = b[ 2 ][ 0 ]: if b[ 0 ][ 2 ] = = 'x' : return 10 else if b[ 0 ][ 2 ] = = 'o' : return - 10 # Else if none of them have won then return 0 return 0 # Driver code if __name__ = = "__main__" : board = [[ 'x' , '_' , 'o' ], [ '_' , 'x' , 'o' ], [ '_' , '_' , 'x' ]] value = evaluate(board) print ( "The value of this board is" , value) # This code is contributed by Rituraj Jain |
C#
// C# program to compute evaluation function for // Tic Tac Toe Game. using System; class GFG { // Returns a value based on who is winning // b[3,3] is the Tic-Tac-Toe board static int evaluate( char [,]b) { // Checking for Rows for X or O victory. for ( int row = 0; row < 3; row++) { if (b[row, 0] == b[row, 1] && b[row, 1] == b[row, 2]) { if (b[row, 0] == 'x' ) return +10; else if (b[row, 0] == 'o' ) return -10; } } // Checking for Columns for X or O victory. for ( int col = 0; col < 3; col++) { if (b[0, col] == b[1, col] && b[1, col] == b[2, col]) { if (b[0, col] == 'x' ) return +10; else if (b[0, col] == 'o' ) return -10; } } // Checking for Diagonals for X or O victory. if (b[0, 0] == b[1, 1] && b[1, 1] == b[2, 2]) { if (b[0, 0] == 'x' ) return +10; else if (b[0, 0] == 'o' ) return -10; } if (b[0, 2] == b[1, 1] && b[1, 1] == b[2, 0]) { if (b[0, 2] == 'x' ) return +10; else if (b[0, 2] == 'o' ) return -10; } // Else if none of them have won then return 0 return 0; } // Driver code public static void Main(String[] args) { char [,]board = { { 'x' , '_' , 'o' }, { '_' , 'x' , 'o' }, { '_' , '_' , 'x' } }; int value = evaluate(board); Console.Write( "The value of this board is {0}" , value); } } // This code is contributed by Rajput-Ji |
Javascript
<script> // Javascript program to compute evaluation function for // Tic Tac Toe Game. // Returns a value based on who is winning // b[3][3] is the Tic-Tac-Toe board function evaluate(b) { // Checking for Rows for X or O victory. for (let row = 0; row < 3; row++) { if (b[row][0] == b[row][1] && b[row][1] == b[row][2]) { if (b[row][0] == 'x' ) return +10; else if (b[row][0] == 'o' ) return -10; } } // Checking for Columns for X or O victory. for (let col = 0; col < 3; col++) { if (b[0][col] == b[1][col] && b[1][col] == b[2][col]) { if (b[0][col] == 'x' ) return +10; else if (b[0][col] == 'o' ) return -10; } } // Checking for Diagonals for X or O victory. if (b[0][0] == b[1][1] && b[1][1] == b[2][2]) { if (b[0][0] == 'x' ) return +10; else if (b[0][0] == 'o' ) return -10; } if (b[0][2] == b[1][1] && b[1][1] == b[2][0]) { if (b[0][2] == 'x' ) return +10; else if (b[0][2] == 'o' ) return -10; } // Else if none of them have won then return 0 return 0; } // Driver code let board=[[ 'x' , '_' , 'o' ], [ '_' , 'x' , 'o' ], [ '_' , '_' , 'x' ]]; let value = evaluate(board); document.write( "The value of this board is " + value+ "<br>" ); // This code is contributed by avanitrachhadiya2155 </script> |
输出:
The value of this board is 10
本文的目的是了解如何为Tic Tac Toe游戏编写一个简单的评估函数。在下一篇文章中,我们将看到如何将这个求值函数与极小极大函数结合起来。敬请期待。 本文作者 阿克谢·L·阿拉迪亚 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论