python怎么实现五子棋双人对弈
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本文小编为大家详细介绍"python怎么实现五子棋双人对弈",内容详细,步骤清晰,细节处理妥当,希望这篇"python怎么实现五子棋双人对弈"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2024年11月23日python怎么实现五子棋双人对弈
本文小编为大家详细介绍"python怎么实现五子棋双人对弈",内容详细,步骤清晰,细节处理妥当,希望这篇"python怎么实现五子棋双人对弈"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
我用的是pygame模块来制作窗口
代码如下:
# 1、引入pygame 和 pygame.localsimport pygamefrom pygame.locals import *import timeimport sys initChessList = []initRole = 2 # 代表白子下 2:代表当前是黑子下resultFlag = 0userFlag = True class StornPoint(): def __init__(self, x, y, value = 0): ''' :param x: 代表x轴坐标 :param y: 代表y轴坐标 :param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子 ''' self.x = x self.y = y self.value = value pass def initChessSquare(x, y): ''' 初始化棋盘的坐标 :param x: :param y: :return: ''' # 使用二维列表保存了棋盘是的坐标系,和每个落子点的数值 for i in range(15): # 每一行的交叉点坐标 rowList = [] for j in range(15): # 每一列的交叉点坐标 pointX = x + j*40 pointY = y + i*40 # value = 0 sp = StornPoint(pointX, pointY, 0) rowList.append(sp) pass initChessList.append(rowList) pass # 处理事件def eventHandler(): global userFlag ''' 监听各种事件 :return: ''' for event in pygame.event.get(): global initRole # 监听点积退出按钮事件 if event.type == QUIT: pygame.quit() sys.exit() pass # 监听鼠标点积事件 if event.type == MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() # print((x, y)) i = j = 0 for temp in initChessList: for point in temp: if x >= point.x - 15 and x <= point.x + 15 \ and y >= point.y - 15 and y <= point.y + 15: # 当前区域没有棋子,并且是白子下 if point.value == 0 and initRole == 1 and userFlag: point.value = 1 judgeResult(i, j, 1) initRole = 2 # 切换棋子颜色 pass elif point.value == 0 and initRole == 2 and userFlag: point.value = 2 judgeResult(i, j, 2) initRole = 1 # 切换棋子颜色 pass break pass j += 1 pass i += 1 j = 0 pass pass pass # 判断输赢函数def judgeResult(i, j, value): global resultFlag flag = False # 用于判断是否已经判决出输赢 for x in range(j - 4, j + 5): # 水平方向有没有出现5连 if x >= 0 and x + 4 < 15 : if initChessList[i][x].value == value and \ initChessList[i][x + 1].value == value and \ initChessList[i][x + 2].value == value and \ initChessList[i][x + 3].value == value and \ initChessList[i][x + 4].value == value : flag = True break pass for x in range(i - 4, i + 5): # 垂直方向有没有出现5连 if x >= 0 and x + 4 < 15: if initChessList[x][j].value == value and \ initChessList[x + 1][j].value == value and \ initChessList[x + 2][j].value == value and \ initChessList[x + 3][j].value == value and \ initChessList[x + 4][j].value == value: flag = True break pass # 判断东北方向的对角线是否出现了5连 for x, y in zip(range(j + 4, j - 5, -1), range(i - 4, i + 5)): if x >= 0 and x+4 < 15 and y + 4 >= 0 and y < 15: if initChessList[y][x].value == value and \ initChessList[y - 1][x + 1].value == value and \ initChessList[y - 2][x + 2].value == value and \ initChessList[y - 3][x + 3].value == value and \ initChessList[y - 4][x + 4].value == value: flag = True break pass pass pass # 判断西北方向的对角是否出现了五连 for x, y in zip(range(j - 4, j + 5), range(i - 4, i + 5)): if x >= 0 and x + 4 < 15 and y >= 0 and y + 4 < 15: if initChessList[y][x].value == value and \ initChessList[y + 1][x + 1].value == value and \ initChessList[y + 2][x + 2].value == value and \ initChessList[y + 3][x + 3].value == value and \ initChessList[y + 4][x + 4].value == value: flag = True break pass pass pass if flag: resultFlag = value pass pass # 加载素材def main(): initRole = 2 # 代表白子下 2:代表当前是黑子下 global resultFlag, initChessList initChessSquare(27, 27) # 初始化棋牌 pygame.init() # 初始化游戏环境 # 创建游戏窗口 screen = pygame.display.set_mode((620,620), 0, 0) # 第一个参数是元组:窗口的长和宽 # 添加游戏标题 pygame.display.set_caption("五子棋小游戏") # 图片的加载 background = pygame.image.load('images/bg.png') blackStorn = pygame.image.load('images/storn_black.png') whiteStorn = pygame.image.load('images/storn_white.png') winStornW = pygame.image.load('images/white.png') winStornB = pygame.image.load('images/black.png') rect = blackStorn.get_rect() while True: screen.blit(background, (0, 0)) # 更新棋盘棋子 for temp in initChessList: for point in temp: if point.value == 1: screen.blit(whiteStorn, (point.x - 18, point.y - 18)) pass elif point.value == 2: screen.blit(blackStorn, (point.x - 18, point.y - 18)) pass pass pass # 如果已经判决出输赢 if resultFlag > 0: initChessList = [] # 清空棋盘 initChessSquare(27, 27) # 重新初始化棋盘 if resultFlag == 1: screen.blit(winStornW, (50,100)) else: screen.blit(winStornB, (50,100)) pass pygame.display.update() if resultFlag >0: time.sleep(3) resultFlag = 0 pass eventHandler() pass pass if __name__ == "__main__": main() pass
插图:放在同一目录下的images文件夹里
bg.png
storn_white.png
storn_black.png
white.png
black.png
读到这里,这篇"python怎么实现五子棋双人对弈"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
坐标
事件
代表
棋盘
五子棋
五子
对弈
文章
监听
交叉点
内容
棋子
白子
黑子
交叉
处理
妥当
一行
代码
坐标系
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发为什么需要平台
软件开发使用的电脑
酒店第三方数据库
新疆软件开发app
it外包网络安全
医保系统网络安全检查表
青少年网络安全必修课
网络安全自我评价怎么写
网络安全就是什么和什么安全
怎样取消数据库密码界面
切实维护网络安全需要
软件开发处理器推荐
方舟怎么服务器刷琥珀
网络安全绘画视频教程
网络安全与可信软件
2017两会谈论网络安全
数据库中value
连接域名服务器和主机的设备
gsa数据库哪些出版社可以
中国拥有数据库的互联网公司
网易实名认证服务器名
数据库证书啥时候报名
无尽的拉格朗日新服务器开服时间
网络技术犯罪 的趋势
月耗电量两万度的服务器有多大
个人信用数据库的核心
郑州星际ipfs服务器
安徽畅想网络技术有限公司
网络安全正能量故事
修改服务器网卡描述中文