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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python socket 超时设置 errno 10054
Jul 01 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
Python反转序列的方法实例分析
Mar 21 Python
transform python环境快速配置方法
Sep 27 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
Python sys模块常用方法解析
Feb 20 Python
python numpy--数组的组合和分割实例
Feb 24 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python OpenCV 图像平移的实现示例
Jun 04 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数据集构建JSON格式及新数组的方法
2012/11/07 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
使用python生成目录树
2018/03/29 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python简易版图书管理系统
2019/08/12 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
公司庆典活动邀请函
2014/01/09 职场文书
大型演出策划方案
2014/05/28 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
陕西导游词
2015/02/04 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
2016年少先队活动总结
2016/04/06 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
解决Redis启动警告问题
2022/02/24 Redis