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检测服务器是否正常
Feb 16 Python
python sort、sorted高级排序技巧
Nov 21 Python
编写Python CGI脚本的教程
Jun 29 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
Python按钮的响应事件详解
Mar 04 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
python开发入门——set的使用
Sep 03 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
php生成QRcode实例
2014/09/22 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
vue项目中使用scss的方法步骤
2019/05/16 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
python如何导入依赖包
2020/07/13 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
故宫的导游词
2015/01/31 职场文书
门店店长岗位职责
2015/04/14 职场文书
酒店温馨提示语
2015/07/14 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python