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笔记(叁)继续学习
Oct 24 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python中常见的异常总结
Feb 20 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
详解python持久化文件读写
Apr 06 Python
python实现mean-shift聚类算法
Jun 10 Python
Python3 requests模块如何模仿浏览器及代理
Jun 15 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
python能做哪些生活有趣的事情
Sep 09 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 一个页面执行时间类代码
2010/03/05 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Windows下安装python2和python3多版本教程
2017/03/30 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python自动化之Ansible的安装教程
2019/06/13 Python
如何给Python代码进行加密
2020/01/10 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python