Python基于pygame实现单机版五子棋对战


Posted in Python onDecember 26, 2019

python实现的五子棋,能够自动判断输赢,没有是实现电脑对战功能

源码下载:pygame五子棋

# 1、引入pygame 和 pygame.locals
import pygame
from pygame.locals import *
import time
import sys
 
initChessList = []
initRole = 1 # 代表白子下 2:代表当前是黑子下
resultFlag = 0
userFlag = 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():
 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

Python基于pygame实现单机版五子棋对战

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 文件和路径操作函数小结
Nov 23 Python
Django admin美化插件suit使用示例
Dec 12 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
python实现txt文件格式转换为arff格式
May 31 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
浅谈Python数学建模之整数规划
Jun 23 Python
python实现简单聊天功能
Jul 07 Python
Python OpenCV形态学运算示例详解
Apr 07 Python
用python3读取python2的pickle数据方式
Dec 25 #Python
python文件绝对路径写法介绍(windows)
Dec 25 #Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 #Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 #Python
python 定义类时,实现内部方法的互相调用
Dec 25 #Python
Python:type、object、class与内置类型实例
Dec 25 #Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 #Python
You might like
PHP数据库操作面向对象的优点
2006/10/09 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
接收键盘指令的脚本
2006/06/26 Javascript
由浅到深了解JavaScript类
2006/09/08 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
JS判断数组那点事
2017/10/10 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
Python中使用动态变量名的方法
2014/05/06 Python
Python 数据结构之旋转链表
2017/02/25 Python
分享6个隐藏的python功能
2017/12/07 Python
python实现俄罗斯方块游戏
2020/03/25 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
pandas删除指定行详解
2019/04/04 Python
python3人脸识别的两种方法
2019/04/25 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
python批量修改xml属性的实现方式
2020/03/05 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
优秀党员主要事迹
2014/01/19 职场文书
农村婚礼主持词
2014/03/13 职场文书
机关工会工作总结2015
2015/05/26 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
倡议书怎么写?
2019/04/11 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技