ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

python+pygame实现五子棋人机对战之四

python+pygame实现五子棋人机对战之四 前文pythonpygame实现五子棋人机对战之一pythonpygame实现五子棋人机对战之二pythonpygame实现五子棋人机对战之三已经将五子棋电脑应手的内容简要描述一下现在就剩下程序如何判断输赢胜负这个问题了。我们想象一下这个场景当某方落子时就会触发一下这个测试看水平方向垂直方向斜向上方向及反斜线方向上是否可以形成连五若是就胜否则继续游戏。五、用程序处理起来就是不停的循环。该内容属于通用的类放在utils.py中。from params import Params rows int(Params.get(ROWS)) blocksize int(Params.get(blockSize)) width int(Params.get(WIDTH)) height int(Params.get(HEIGHT)) # 判断是否五子连线 def checkwin(sourcechesses,posx,posy): # x轴方向 num_x 0 left posx - blocksize while( left 0 and sourcechesses.count((left,posy)) 1 ): num_x 1 left - blocksize right posx blocksize while( right width and sourcechesses.count((right,posy)) 1 ): num_x 1 right blocksize num_x 1 # y轴方向 num_y 0 up posy - blocksize while( up 0 and sourcechesses.count((posx,up)) 1): num_y 1 up - blocksize down posy blocksize while( down height and sourcechesses.count((posx,down)) 1): num_y 1 down blocksize num_y 1 # 对角线 左上到右下 num_135 0 down135x posx blocksize down135y posy blocksize while( down135x width and down135y height and sourcechesses.count((down135x,down135y)) 1 ): num_135 1 down135y blocksize down135x blocksize up315x posx - blocksize up315y posy - blocksize while( up315x 0 and up315y 0 and sourcechesses.count((up315x,up315y)) 1 ): num_135 1 up315x - blocksize up315y - blocksize num_135 1 # 对角线 左下到右上 num_45 0 up45x posx blocksize up45y posy - blocksize while( up45x width and up45y 0 and sourcechesses.count((up45x,up45y)) 1 ): num_45 1 up45y - blocksize up45x blocksize down225x posx - blocksize down225y posy blocksize while( down225x 0 and down225y height and sourcechesses.count((down225x,down225y)) 1): num_45 1 down225x - blocksize down225y blocksize num_45 1 if num_x 5 or num_y 5 or num_135 5 or num_45 5: return True return False以x轴方向为例# x轴方向 num_x 0 left posx - blocksize while( left 0 and sourcechesses.count((left,posy)) 1 ): num_x 1 left - blocksize right posx blocksize while( right width and sourcechesses.count((right,posy)) 1 ): num_x 1 right blocksize num_x 1num_x是变量记录该方向上有几个同色棋子相连。由于判断是基于当前下的棋子所以参数有sourcechesses,posx,posy。sourcechesses就是在main中定义的white_positions和black_positions当前下的啥颜色的棋就到对于的**_positions去找而**_positions保存的就是棋子的转换后的位置pointtrans详情见系列文章一在集合中查找某元素是否存在有很多内置方法或自己写方法本项目用的是count内置函数。x轴方向先往左找直到最左边能找到同色棋子再往右找直至最右边能找到同色棋子。加起来之和再加上当前的棋子得到的就是该方向上同色棋子的数量。其他三个方向逻辑雷同不再赘述。剩下的就是在main中把这些逻辑填空上去就可以了。待续pythonpygame实现五子棋人机对战之五
返回列表