python实现五子棋游戏


Posted in Python onJune 18, 2019

本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下

话不多说,直接上代码:

全部工程文件,在GitHub:五子棋

效果预览:

python实现五子棋游戏

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import *
from sys import exit
import numpy
background_image = 'qipan.png'
white_image = 'white.png'
black_image = 'black.png'
 
def WhoWin(x,y,darray):
 num1,num2,num3,num4 = 0,0,0,0
 #判断上下左右左上右上左下右下8个方向
 i = x-1
 while(i>=0):
 if darray[i][y] == 1:
  num1+=1
  i -= 1
 else:
  break
 i = x+1
 while i<19:
 if darray[i][y] == 1:
  num1+=1
  i += 1
 else:
  break
 j =y-1
 while (j >= 0):
 if darray[x][j] == 1:
  num2 += 1
  j -= 1
 else:
  break
 j = y + 1
 while j < 19:
 if darray[x][j] == 1:
  num2 += 1
  j += 1
 else:
  break
 
 i,j = x-1,y-1
 while(i>=0 and j>=0):
 if darray[i][j] == 1:
  num3 += 1
  i -= 1
  j -= 1
 else :
  break
 i, j = x + 1, y + 1
 while (i < 19 and j < 19):
 if darray[i][j] == 1:
  num3 += 1
  i += 1
  j += 1
 else:
  break
 
 i, j = x + 1, y - 1
 while (i >= 0 and j >= 0):
 if darray[i][j] == 1:
  num4 += 1
  i += 1
  j -= 1
 else:
  break
 i, j = x - 1, y + 1
 while (i < 19 and j < 19):
 if darray[i][j] == 1:
  num4 += 1
  i -= 1
  j += 1
 else:
  break
 
#五子胜
 if num1>=4 or num2>=4 or num3 >= 4 or num4 >= 4:
 return True
 else:
 return False
 
#初始化
pygame.init()
#屏幕、背景图、白黑子转换
screen = pygame.display.set_mode((584, 584), RESIZABLE, 32)
background = pygame.image.load(background_image).convert()
white = pygame.image.load(white_image).convert_alpha()
black = pygame.image.load(black_image).convert_alpha()
#标题画图字体
screen.blit(background, (0,0))
font = pygame.font.SysFont("arial", 40);
pygame.display.set_caption('五子棋')
 
#zeros()返回19行19列的数组
white_luodian = numpy.zeros((19,19))
black_luodian = numpy.zeros((19,19))
 
#设置棋盘的所有点的坐标
qipan_list = [(30+i*29-12,30+j*29-12) for i in range(19) for j in range(19)]
#默认黑子先手,转换下棋
transW_B = True
#游戏主循环
while True:
 
 for event in pygame.event.get():
 if event.type == QUIT:
  exit()
 if event.type == MOUSEBUTTONDOWN:
  x,y = pygame.mouse.get_pos()
  if 30 <= x <= 554 and 30 <= y <= 554 and ((x - 30) % 29 <= 12 or (x - 30) % 29 >= 17) and (
   (y - 30) % 29 <= 12 or (y - 30) % 29 >= 17):
  #四舍五入
  m = int(round((x-30)/29))
  n = int(round((y-30)/29))
  #结果分析
  if transW_B:
   transW_B = not transW_B
   screen.blit(black, qipan_list[19*m+n])
   black_luodian[n][m] = 1
   if WhoWin(n,m,black_luodian):
   screen.blit(font.render('Black chess player wins!', True, (0, 0, 0),(0,229,238)), (120, 280))
 
  else:
   transW_B = not transW_B
   screen.blit(white, qipan_list[19 * m + n])
   white_luodian[n][m] = 1
   if WhoWin(n,m,white_luodian):
   screen.blit(font.render('White chess player wins!', True, (255, 255, 255),(0,229,238)), (120, 280))
 
  qipan_list[19*m+n] = ''
 
 pygame.display.update()

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

Python 相关文章推荐
python获取android设备的GPS信息脚本分享
Mar 06 Python
python编写简单爬虫资料汇总
Mar 22 Python
python的变量与赋值详细分析
Nov 08 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
学生信息管理系统python版
Oct 17 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Python计算信息熵实例
Jun 18 Python
Python requests库参数提交的注意事项总结
Mar 29 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 Python
解决python中使用PYQT时中文乱码问题
Jun 17 #Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 #Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 #Python
python3.6根据m3u8下载mp4视频
Jun 17 #Python
python如何实现视频转代码视频
Jun 17 #Python
python批量爬取下载抖音视频
Jun 17 #Python
python批量下载抖音视频
Jun 17 #Python
You might like
Cannot modify header information错误解决方法
2008/10/08 PHP
ini_set的用法介绍
2014/01/07 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
node.js下when.js 的异步编程实践
2014/12/03 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
python中定义结构体的方法
2013/03/04 Python
Python修改Excel数据的实例代码
2013/11/01 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python树的同构学习笔记
2019/09/14 Python
Python turtle库的画笔控制说明
2020/06/28 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
2013年研究生毕业感言
2014/02/06 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
朋友聚会开场白
2015/06/01 职场文书
贷款收入证明格式
2015/06/24 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
选购到合适的激光打印机
2022/04/21 数码科技
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js