1. 问题定义
一字棋游戏,包括两个选手。用户可以在一个3*3的棋盘上任意的选择空闲的位置拜访棋子,最早在水平方向上,或者垂直方向上或者对角线方向上形成三子一线者获胜。棋盘如图1所示。这里我们实现的是用户和计算机进行对弈。本程序要实现的是让计算机可以自动的根据当前棋局计算下一步对自己最有利的走步,尽可能的朝着可以让计算机获胜的方向走步。需要采用极大极小搜索算法。
图1.一字棋棋盘
2. 技术现状
目前一字棋作为各个高校的人工智能教学的典型范例,在技术方面一般都采用极大极小搜索算法,理论层面比较成熟,有很多资料可以参考。大部分教学资料的一字棋都采用C++语言编写,因为本人对C++语言不是很熟悉,更不熟悉C++语言的界面操作,所以在这里的所有实现都通过C#来实现。在刘峡壁老师编著的《人工智能导论——方法与系统》[1]一书中,对一字棋算法的极大极小搜索有着比较详细的介绍,本系统的实现,主要参照了刘峡壁老师一书中对一字棋算法的介绍。
3. 本文采用方法
3.1 极大极小搜索
在本博弈算法中,采用极大极小搜索[2]方法搜索计算机的下一步走步方法,每一次走步的时候以计算机当前所面对的棋局状态作为根顶点,生成一棵有限深度的博弈子树,然后从该博弈子树的叶结点向上回溯,确定在根顶点处的当前最好的策略,找到一条当前最好行动的边。在生成博弈子树的过程中,计算机己方对应的走步状态的节点称为MAX节点,对应的对手走步的节点成为MIN节点。
设计的棋