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 相关文章推荐
使用graphics.py实现2048小游戏
Mar 10 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
python使用turtle库绘制树
Jun 25 Python
获取python的list中含有重复值的index方法
Jun 27 Python
python使用scrapy发送post请求的坑
Sep 04 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
在django中自定义字段Field详解
Dec 03 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
如何解决.cuda()加载用时很长的问题
May 24 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
python中Switch/Case实现的示例代码
2017/11/09 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
python内打印变量之%和f的实例
2020/02/19 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
python 如何停止一个死循环的线程
2020/11/24 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
中学生评语大全
2014/04/18 职场文书
理想演讲稿范文
2014/05/21 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript