python五子棋双人对弈_PyQt5实现五子棋游戏(人机对弈)

这篇博客主要是为了学习Python和PyQt,因为对棋类游戏比较热衷,所以从规则较简单的五子棋入手,利用PyQt5实现图形界面,做一个可以进行人机对弈的脚本,最后打包成应用程序。AI的算法打算用神经网络来完成,正在苦学TensorFlow中。

本来我以为五子棋规则很简单,不就像小学时候玩的那样,五个棋子连在一起就赢了嘛,但是后来发现事情并没有那么简单,现在的五子棋有禁手这个规则 ,“三三禁手” 、“四四禁手”、“长连禁手”等等,都是为了限制现行一方必胜。我也不是职业的棋手,对吧,所以禁手什么的就不考虑了,弄个简单的成品出来就很满足了。

代码全是边学习边写的,有瑕疵的地方欢迎提出。

第一步,收集素材

主要就是棋子、棋盘的图片,还有下棋的音效

音效与代码一起在最后给出

第二步,五子棋的逻辑类

收集完素材后,不着急界面的编写,先将五子棋的逻辑写好,界面和逻辑要分开,这很重要。

先想想在五子棋的逻辑类里要有哪些东西。

首先是棋盘,棋盘用15*15的数组表示

然后是棋子,黑棋用1表示,白棋用2表示,空白就用0表示

再然后还要获取指定点的坐标,获取指定点的方向等等。

最重要的也是稍微有点难度的部分就是判断输赢。结合网上的方法和我自己的理解,下面贴出我写的代码,仅供参考。

chessboard.py

# ----------------------------------------------------------------------

# 定义棋子类型,输赢情况

# ----------------------------------------------------------------------

EMPTY = 0

BLACK = 1

WHITE = 2

# ----------------------------------------------------------------------

# 定义棋盘类,绘制棋盘的形状,切换先后手,判断输赢等

# ----------------------------------------------------------------------

class ChessBoard(object):

def __init__(self):

self.__board = [[EMPTY for n in range(15)] for m in range(15)]

self.__dir = [[(-1, 0), (1, 0)], [(0, -1), (0, 1)], [(-1, 1), (1, -1)], [(-1, -1), (1, 1)]]

# (左 右) (上 下) (左下 右上) (左上 右下)

def board(self): # 返回数组对象

return self.__board

def draw_xy(self, x, y, state): # 获取落子点坐标的状态

self.__board[x][y] = state

def get_xy_on_logic_state(self, x, y): # 获取指定点坐标的状态

return self.__board[x][y]

def get_next_xy(self, point, direction): # 获取指定点的指定方向的坐标

x = point[0] + direction[0]

y = point[1] + direction[1]

if x < 0 or x >= 15 or y < 0 or y >= 15:

return False

else:

return x, y

def get_xy_on_direction_state(self, point, direction): # 获取指定点的指定方向的状态

if point is not False:

xy = self.get_next_xy(point, direction)

if x

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值