[单片机项目]基于STM32的五子棋对战平台

       在差不多一个月以前就已经完成了这个小项目,这也算是是我做的第一个比较大的单片机项目,借用了Openedv上网友的一些代码,自己又加入了不少功能。

       这个五子棋对战平台使用的是正点原子STM32F407探索者的开发板。

       支持人机对战、人人对战,在人机对战下可以悔棋、可以帮助,当然在人人对战下是不能的啦,然后可以校准触摸屏,可以打开声音(我的声音用的就是板载的蜂鸣器,每次下子会发出bi的一声)。

        我介绍几个比较重要的技术细节。

        首先,就是对于落子顺序的记录以及悔棋的实现。

        本程序采用的方法是:定义一个16*16数组g_Chess表示棋盘上的每一个位置,第一个int型参数g_ChessNum在记录棋子个数,每次下子后g_ChessNum自增一,同时把g_ChessNum的值写入g_Chess数组的对应位置,当要进行悔棋操作时,只需要遍历数组找到与当前g_ChessNum值相同的位置,将其置零,并且把g_ChessNum的值-1,再把棋子从棋盘上抹去就完成了悔棋操作。

       第二个就是AI下子的实现。

       在这个程序中使用的AI下子并不是我自己写的,而是从Openedv网友的程序中copy的,但是我也对AI下子的程序进行了理解,我可以简述一下他的原理。首先,有一个查找棋线的函数,它是用来检查某空位八个方向(上、下、左、右、左上、左下、右上、右下)各自的棋线的,可以返回该方向棋子个数。然后遍历俩次棋盘,以俩种棋色,分别每一个空位的四条线(横竖俩斜线)进行检测,得到每一个点当前的棋线状态,并且给他们赋一个分值,最后得到俩种棋色分别的最高分点(也就是最有利的下子点)。最后要对俩个下子点的分值进行比较(电脑为白子,人为黑子),若白子的分值高,电脑会选择进攻,在白子的最高分点下子;若黑子的分值高,电脑会选择防守,在黑子的最高分点下子。

       最后就是校准程序。

       校准程序我采用了外部中断的方式,用杜邦线将PA4与PC0相连,PC0为输出,PA4为输入,PA4使用上升沿触发,当我点击校准时,将PC0输出高点平,触发PA4的外部中断,在中断中执行校准程序,校准完成后,将PC0电平拉低,完成校准。

       以上就是我的五子棋对战平台项目。

       B站视频:点击打开链接

    

猜你喜欢

转载自blog.csdn.net/a568713197/article/details/80461127