我用的是pygame模块来制作窗口

代码如下:

# 1、引入pygame 和 pygame.locals
import pygame
from pygame.locals import *
import time
import sysinitChessList = []
initRole = 2 # 代表白子下 2:代表当前是黑子下
resultFlag  = 0
userFlag = Trueclass StornPoint():def __init__(self, x, y, value = 0):''':param x: 代表x轴坐标:param y: 代表y轴坐标:param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子'''self.x = xself.y = yself.value = valuepassdef initChessSquare(x, y):'''初始化棋盘的坐标:param x::param y::return:'''# 使用二维列表保存了棋盘是的坐标系,和每个落子点的数值for i in range(15):      # 每一行的交叉点坐标rowList = []for j in range(15):  # 每一列的交叉点坐标pointX = x + j*40pointY = y + i*40# value  = 0sp = StornPoint(pointX, pointY, 0)rowList.append(sp)passinitChessList.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 = 0for 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 = 1judgeResult(i, j, 1)initRole = 2    # 切换棋子颜色passelif point.value == 0 and initRole == 2 and userFlag:point.value = 2judgeResult(i, j, 2)initRole = 1    # 切换棋子颜色passbreakpassj += 1passi += 1j = 0passpasspass# 判断输赢函数
def judgeResult(i, j, value):global resultFlagflag = 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 = Truebreakpassfor 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 = Truebreakpass# 判断东北方向的对角线是否出现了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 = Truebreakpasspasspass# 判断西北方向的对角是否出现了五连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 = Truebreakpasspasspassif flag:resultFlag = valuepasspass# 加载素材
def main():initRole = 2  # 代表白子下 2:代表当前是黑子下global resultFlag, initChessListinitChessSquare(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))passelif point.value == 2:screen.blit(blackStorn, (point.x - 18, point.y - 18))passpasspass# 如果已经判决出输赢if resultFlag > 0:initChessList = []      # 清空棋盘initChessSquare(27, 27) # 重新初始化棋盘if resultFlag == 1:screen.blit(winStornW, (50,100))else:screen.blit(winStornB, (50,100))passpygame.display.update()if resultFlag >0:time.sleep(3)resultFlag = 0passeventHandler()passpassif __name__ == "__main__":main()pass

插图:放在同一目录下的images文件夹里

bg.png

storn_white.png

storn_black.png

white.png

black.png

弄完了这几个图,就自己动手运行看看吧!

python实现五子棋双人对弈相关推荐

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

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

  2. 用Python制作五子棋人机对弈(人工智障版和升级AI版)

    智障版截图: 智能版截图: 可能遇到的问题: No module named 'pyqt5'解决办法 智障版源码: 背景: muzm.jpg window.py from PyQt5.QtWidget ...

  3. java双人对弈五子棋源码_JAVA高手接招————— 五子棋双人对弈程序

    展开全部 新建一个chess类,其中代码如下 package work; import java.awt.Color; public class Chess { public static final ...

  4. python打印五子棋棋盘的两种方法

    五子棋是一种由双人对弈的纯策略型棋类游戏,它使用的棋盘一般由横纵等距的各15条平行线构成,这些线垂直交叉形成的225个交叉点为对弈双方的落子点.本实例要求编写代码,实现按用户要求打印指定大小的五子棋棋 ...

  5. Python实现五子棋人机对战 | CSDN博文精选

    作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) 五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题.这篇文章主要介绍了Python版本五子棋的实现代码,大家可以做个参 ...

  6. 百行 HTML5 代码实现四种双人对弈游戏

    简介: 本文是一个非常具有挑战性的编程,因为 100 行代码,约莫 10000 个字符左右,将实现围棋.五子棋.四子棋和翻转棋四种双人对弈游戏.请注意,这四个对弈游戏不是初级编程者的习作,而是有着棋盘 ...

  7. python打印五子棋棋盘(简易)

    五子棋是一种双人对弈的纯策略型棋类游戏,它使用的棋盘一般由横纵各15条等距离.垂直交叉的平行线构成,这些横纵交叉形成的225个交叉点为对弈双方的落子点. 编写代码,实现按用户要求打印指定大小的五子棋棋 ...

  8. Scratch3.0——助力新进程序员理解程序(难度案例三、五子棋双人对战-电脑需要AI写不出来)

    Scratch3.0--助力新进程序员理解程序(难度案例三.五子棋双人对战-电脑需要AI写不出来) 前言 一般来说,针对6-18岁的少年儿童开展的编程教育,现在,最常见的形式是线上和线下模式相结合的课 ...

  9. 基于Python实现五子棋

    基于Python实现五子棋 了解游戏的规则是我们首先需要做的事情,如果不知晓规则,那么我们肯定寸步难行. 五子棋游戏规则: 对局双方各执一色棋子. 空棋盘开局. 黑先.白后,交替下子,每次只能下一子. ...

最新文章

  1. Linux下MySQL C API简单示例
  2. 全局唯一递增的id_分布式ID生成方法-趋势有序的全局唯一ID
  3. 第一章 PX4程序编译过程解析
  4. why jQuery.clone does not work as expected
  5. m个苹果放入n个盘子问题
  6. 如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程
  7. linux安装python和pip3,Linux安装python3.6 和pip
  8. 小米全新潮流系列小米Civi首销5分钟销售额突破2亿元
  9. html template--(来自网易)
  10. snprintf的返回值代表字节数 != 实际写入字节数
  11. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_1 今日课程内容介绍
  12. SQL Server 2008 R2 建立数据库,建立表,建立存储过程
  13. 电脑关机后键盘灯和风扇还在转的解决方案
  14. 图像边缘检测的新方向——量子算法
  15. [自学考试] [02142数据结构导论] Part1 概论
  16. 2018总结-店铺投资篇
  17. 基于原生JS写的异形轮播图--效果如网易云、QQ音乐播放器中轮播图
  18. qemu里pci设备的热插拔
  19. 如何解决layui弹出层闪退的问题
  20. 503 service unavailable 错误怎么解决?503 service unavailable 错误的解决方法。

热门文章

  1. VK2C21C SOP20是低功耗抗干扰LCD液晶显示驱动芯片/段式LCD液晶驱动IC,完全兼容替代16C21,适用多种电气类LCD驱动面板
  2. 富士施乐再推“中国定制”新品 引领中小企业智能化移动办公潮流
  3. 【MYSQL数据库基础篇第一部分总结】
  4. Excel2007使用SQL语句
  5. Shell脚本是什么?
  6. 华为当个pl怎么样_PL是华为最难干的岗位吗?
  7. NVIDIA 显卡算力 统计表
  8. 固原2021年高考成绩查询,固原高考成绩查询入口
  9. python-爬虫-woff静态字体-映射方法之一(大众点评字形与编码的对应关系)
  10. Windows如何定制键盘按键