python五子棋程序教程_python实现五子棋游戏
本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下
话不多说,直接上代码:
全部工程文件,在GitHub:五子棋
效果预览:
#!/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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
时间: 2019-06-18
python五子棋程序教程_python实现五子棋游戏相关推荐
- python五子棋程序教程_python实现五子棋小程序
本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下 一.结合书上例子,分三段编写: wuziqi.py #coding:utf-8 from win_notwin i ...
- python五子棋程序教程_Python 五子棋 编程
N年前用python写的五子棋游戏,电脑执白子,只能判断一步,新手级别(可以再添加几层循环让它厉害一点) .程序的UI界面是用python的标准库 Tkinter 写的,有点乱,现在已然看不懂. 代码 ...
- python打地鼠游戏教程_Python入门小游戏,炫酷打地鼠教程第二部分,都是干货
还记得那位玩打地鼠小游戏,然后学会python的女白领吗? 那份教程还没有写完,只写到了对游戏中精灵的定义,然后我们继续写. 实现了游戏精灵的定义后,我们就要开始展现真正的技术啦,也就是写主程序. 首 ...
- python学习手册教程_python学习手册:如何学习python学习教程?
常听人说:选择不对,努力也白费!如今互联网行业火热,越来越多人加入到Python.JAVA.HTML5.大数据的领域来.关于学Python.JAVA.HTML5.大数据到底哪个编程语言好?小编不能帮你 ...
- python搭建环境教程_python教程(一)·python环境搭建
如前所述,python是一种解释语言,需要一个翻译,或者虚拟机,将python代码并运行它.因此,我们需要一个翻译,现在去官方网站.或者使用一个搜索引擎,如百度搜索,搜索关键字\u201Cpython ...
- python独立网站教程_python做网站教程_如何免费做网站的教程
python学习指南教程 180x270 - 7KB - JPEG 图灵程序设计丛书:Python基础教程 260x317 - 12KB - JPEG 跳一跳python使用教程 微信跳一跳pytho ...
- python自学完整教程_python自学完整教程
[教程介绍] 想学习一门编程语言,是不是必须考上大学的计臬机专业,才能真正学会呢? 其实不是,在我们身边,很多初中生,甚至国外不少小学生都能把编程学好,通过自学,很多人都能成为编程高手. python ...
- python入门测试教程_Python测试入门
python入门测试教程 This tutorial is for anyone who has written a fantastic application in Python but hasn' ...
- python 微信机器人教程_Python创建微信机器人(附赠Python视频教程)
微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一个微信聊天机器人,突然想起鲁迅先生曾经说过的一句话: 因为是微信机器人 ...
最新文章
- java菱形乱码 编码_JAVA:编码与乱码问题
- Linux下C程序的链接过程
- python-opencv图像处理之SIFT尺度不变特征变换
- php tp写构造函数,tp5参数绑定到构造函数
- base64编码的图片字节流存入html页面中的显示
- HTC 一个基站老无法定位
- 计算机视觉与图形学-神经渲染专题-神经体渲染:实时渲染KiloNeRF
- [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
- android barchart设置标题,android - 如何设置MPAndroidChart BarChart的高度和宽度? - 堆栈内存溢出...
- 使用iText对pdf中查找关键字坐标进行填充
- 冰冻三尺,非一日之寒。数据解析——xpath(4)
- php利用表格敬将所选择的数据显示出来,单元格下拉筛选设置/Excel对筛选后的单元格进行下拉填充...
- webpack与vue的结合使用出现的bug
- Google 不想与甲骨文争了,要放弃 Java APIs
- 程序员如何在技术上提升自己
- OPPO Java后端校招提前批面试
- 音频电平vu显示表软件下载_正点原子开拓者 Nios II资料连载第十章MCU TFT-LCD图片显示实验...
- C/C++ 算法分析与设计:递归(年龄问题)
- 字节跳动青训营Day01 - 实战项目 - 在线翻译字典
- 基于javaweb+jsp的生病慢病报销管理信息系统(java+MySQL+Jdbc+Servlet+Jsp)
热门文章
- UI自动化测试框架-从入门到精通
- 从Folly源代码中学习C ++ 11的新功能。
- 【Python学习】transpose函数
- 计算机图形学结课论文,计算机图形学基础教程结课论文
- 医疗行业大数据医疗分析案例
- 会声会影X10视频制作软件中文密钥激活版
- APP接入微信支付流程
- 简单网页版的注册登录案例(JSP+CSS+MySQL+Servlet+MVC设计思想,含源码!)
- DNS系统(服务器)的工作原理及攻击防护
- java中高效遍历list_Java中四种遍历List的方法总结(推荐)