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错误处理详解
Sep 28 Python
python控制台中实现进度条功能
Nov 10 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
python中私有函数调用方法解密
Apr 29 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
python如何读取bin文件并下发串口
Jul 05 Python
Django工程的分层结构详解
Jul 18 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
python将图片转base64,实现前端显示
Jan 09 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 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读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
asp.net和php的区别点总结
2019/10/10 PHP
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python调用百度语音识别api
2018/08/30 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
python爬虫实现获取下一页代码
2020/03/13 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
假面舞会策划方案
2014/05/29 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
公历12个月名称的由来
2022/04/12 杂记