欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

人工智能——基于alpha-beta剪枝算法的井字棋游戏

程序员文章站 2022-05-19 15:06:06
...

游戏开发介绍:

使用窗口设计界面布局,画出三行三列的表格样子的棋盘,画出圆形棋子,并找出所有的落棋位置,
添加鼠标点击事件,设置一系列初始值(比如鼠标是否点击,棋子颜色交替改变,结束标志等)。
定义timi()函数判断胜负,bestScore()函数选择最优下棋方案,AI()函数设置电脑下棋的步骤。

井字棋的完整走法:首先画出两层博弈树的所有节点,然后计算出所有叶节点,也就是最下层节点的评估值,即评价函数的值。自上而下进行倒推,计算出根节点的评估值,然后就能确定合适的走法。
如下图所示,当我方棋子用叉表示,敌方用圆圈表示,我方选择第二行第一列的位置做先手,那么判断地方可能落子的五种走法,当敌方落到中心位置时,我发方赢得可能性最大,再从第一层扩展图中选择评估值最小的走法作为我方最终的落子点。人工智能——基于alpha-beta剪枝算法的井字棋游戏

#最优方案(状态,最小值,最大值)
def bestScore(sta, alpha, beta):
    if sta:
        pi = 1
    else:
        pi = 2
    #局势判断 0(-1):红胜 1(1):绿胜  3(0):平局
    if timi() == 0:
        return -1
    elif timi() == 1:
        return 1
    elif timi() == 3:
        return 0
    else:
        for m in range(3):
            for n in range(3):
                if postion[m][n] == 0:
                    postion[m][n] = pi
                    score = bestScore(not sta, alpha, beta)
                    postion[m][n] = 0
                    if sta:
                        if score < beta:
                            beta = score
                        if beta <= alpha:
                            return alpha
                    else:
                        if score >= alpha:
                            alpha = score
                        if beta < alpha:
                            return beta
        if sta:
            return beta
        else:
            return alpha
    ```