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进程管理工具supervisor使用实例
Sep 17 Python
Python的高级Git库 Gittle
Sep 22 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
python deque模块简单使用代码实例
Mar 12 Python
基于Python和C++实现删除链表的节点
Jul 06 Python
详解python 内存优化
Aug 17 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
php重定向的三种方法分享
2012/02/22 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
Java中final关键字详解
2015/08/10 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
JavaScript的类型简单说明
2010/09/03 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
会议主持词
2014/03/17 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
法制宣传教育方案
2014/05/09 职场文书
项目经理任命书范本
2014/06/05 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
2014年纪检工作总结
2014/11/12 职场文书
党支部综合考察意见
2015/06/01 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS