python五子棋单机版源代码_Python基于pygame实现单机版五子棋对战
python实现的五子棋,能够自动判断输赢,没有是实现电脑对战功能
# 1、引入pygame 和 pygame.locals
import pygame
from pygame.locals import *
import time
import sys
initChessList = []
initRole = 1 # 代表白子下 2:代表当前是黑子下
resultFlag = 0
userFlag = True
class StornPoint():
def __init__(self, x, y, value = 0):
'''
:param x: 代表x轴坐标
:param y: 代表y轴坐标
:param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子
'''
self.x = x
self.y = y
self.value = value
pass
def initChessSquare(x, y):
'''
初始化棋盘的坐标
:param x:
:param y:
:return:
'''
# 使用二维列表保存了棋盘是的坐标系,和每个落子点的数值
for i in range(15): # 每一行的交叉点坐标
rowList = []
for j in range(15): # 每一列的交叉点坐标
pointX = x + j*40
pointY = y + i*40
# value = 0
sp = StornPoint(pointX, pointY, 0)
rowList.append(sp)
pass
initChessList.append(rowList)
pass
# 处理事件
def eventHandler():
global userFlag
'''
监听各种事件
:return:
'''
for event in pygame.event.get():
global initRole
# 监听点积退出按钮事件
if event.type == QUIT:
pygame.quit()
sys.exit()
pass
# 监听鼠标点积事件
if event.type == MOUSEBUTTONDOWN:
x, y = pygame.mouse.get_pos() #
print((x, y))
i = j = 0
for temp in initChessList:
for point in temp:
if x >= point.x - 15 and x <= point.x + 15 \
and y >= point.y - 15 and y <= point.y + 15:
# 当前区域没有棋子,并且是白子下
if point.value == 0 and initRole == 1 and userFlag:
point.value = 1
judgeResult(i, j, 1)
initRole = 2 # 切换棋子颜色
pass
elif point.value == 0 and initRole == 2 and userFlag:
point.value = 2
judgeResult(i, j, 2)
initRole = 1 # 切换棋子颜色
pass
break
pass
j += 1
pass
i += 1
j = 0
pass
pass
pass
# 判断输赢函数
def judgeResult(i, j, value):
global resultFlag
flag = False # 用于判断是否已经判决出输赢
for x in range(j - 4, j + 5): # 水平方向有没有出现5连
if x >= 0 and x + 4 < 15 :
if initChessList[i][x].value == value and \
initChessList[i][x + 1].value == value and \
initChessList[i][x + 2].value == value and \
initChessList[i][x + 3].value == value and \
initChessList[i][x + 4].value == value :
flag = True
break
pass
for x in range(i - 4, i + 5): # 垂直方向有没有出现5连
if x >= 0 and x + 4 < 15:
if initChessList[x][j].value == value and \
initChessList[x + 1][j].value == value and \
initChessList[x + 2][j].value == value and \
initChessList[x + 3][j].value == value and \
initChessList[x + 4][j].value == value:
flag = True
break
pass
# 判断东北方向的对角线是否出现了5连
for x, y in zip(range(j + 4, j - 5, -1), range(i - 4, i + 5)):
if x >= 0 and x+4 < 15 and y + 4 >= 0 and y < 15:
if initChessList[y][x].value == value and \
initChessList[y - 1][x + 1].value == value and \
initChessList[y - 2][x + 2].value == value and \
initChessList[y - 3][x + 3].value == value and \
initChessList[y - 4][x + 4].value == value:
flag = True
break
pass
pass
pass
# 判断西北方向的对角是否出现了五连
for x, y in zip(range(j - 4, j + 5), range(i - 4, i + 5)):
if x >= 0 and x + 4 < 15 and y >= 0 and y + 4 < 15:
if initChessList[y][x].value == value and \
initChessList[y + 1][x + 1].value == value and \
initChessList[y + 2][x + 2].value == value and \
initChessList[y + 3][x + 3].value == value and \
initChessList[y + 4][x + 4].value == value:
flag = True
break
pass
pass
pass
if flag:
resultFlag = value
pass
pass
# 加载素材
def main():
global resultFlag, initChessList
initChessSquare(27, 27) # 初始化棋牌
pygame.init() # 初始化游戏环境
# 创建游戏窗口
screen = pygame.display.set_mode((620,620), 0, 0) # 第一个参数是元组:窗口的长和宽
# 添加游戏标题
pygame.display.set_caption("五子棋小游戏")
# 图片的加载
background = pygame.image.load('images/bg.png')
blackStorn = pygame.image.load('images/storn_black.png')
whiteStorn = pygame.image.load('images/storn_white.png')
winStornW = pygame.image.load('images/white.png')
winStornB = pygame.image.load('images/black.png')
rect = blackStorn.get_rect()
while True:
screen.blit(background, (0, 0))
# 更新棋盘棋子
for temp in initChessList:
for point in temp:
if point.value == 1:
screen.blit(whiteStorn, (point.x - 18, point.y - 18))
pass
elif point.value == 2:
screen.blit(blackStorn, (point.x - 18, point.y - 18))
pass
pass
pass
# 如果已经判决出输赢
if resultFlag > 0:
initChessList = [] # 清空棋盘
initChessSquare(27, 27) # 重新初始化棋盘
if resultFlag == 1:
screen.blit(winStornW, (50,100))
else:
screen.blit(winStornB, (50,100))
pass
pygame.display.update()
if resultFlag >0:
time.sleep(3)
resultFlag = 0
pass
eventHandler()
pass
pass
if __name__ == "__main__":
main()
pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python五子棋单机版源代码_Python基于pygame实现单机版五子棋对战相关推荐
- python 播放mp3模块_Python基于pygame模块播放MP3的方法示例
1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...
- Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk
Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame2.0.1, pymunk5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏 ...
- Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款
Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款,实现:用户登录注册,商品展示,商品详情界面,搜索商品,将不同尺寸颜色数量的商品加入购物车,购物车管理,地址管理,形 ...
- python pygame字体设置_Python基于pygame实现的font游戏字体(附源码)
本文实例讲述了Python基于pygame实现的font游戏字体.分享给大家供大家参考,具体如下: 在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中 ...
- python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏
基于 pygame 设计贪吃蛇游戏 贪吃蛇游戏通过玩家控制蛇移动,不断吃到食物增长,直到碰到蛇身或边界游戏结束.其运行效果如下所示: 游戏开始时,先导入可能需要用到的包. import time im ...
- Python小项目俄罗斯方块代码基于pygame编写
python实习作业或者期末作业,俄罗斯方块,基于pygame编写 有很多小伙伴想要找一些小项目练练手,下面是我在闲暇时写的一个俄罗斯方块的一个小游戏,它是基于pygame板块来实现的 这是它的首页界 ...
- python五子棋单机版源代码_python实现单机五子棋
简介 这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏.面向新手. 程序主要包括两个部分,图形创建与逻辑编写两部分. 程序的运行结果: 样式创建 老规矩,先 ...
- python五子棋单机版源代码_python 五子棋 游戏源码(python 2.7入门级)
[实例简介] [实例截图] [核心代码] from Tkinter import * from tkMessageBox import * class Game: def __init__(self) ...
- python怎么建立画板_Python基于opencv实现的简单画板功能示例
本文实例讲述了Python基于opencv实现的简单画板功能.分享给大家供大家参考,具体如下: import cv2 import numpy as np drawing = False # true ...
最新文章
- 我都陪你坐了一天了,你好歹说句话啊!吖的,谱也忒大了。。。
- SAP S4 BP事务代码的业务伙伴和供应商,客户之间的表关系
- NEO智能合约反编译工具
- dedeCMS,标准的MVC框架运行原理和缓存
- 文件内容查找java,java库从文件内容中查找mime类型
- nginx四层端口转发
- JavaScript函数小集锦
- mysql_install_db卸载_MySQL数据库的卸载与安装
- OJ1012: 求绝对值
- Java学习日报—Java并发—2021/11/22
- 函数节流你应该知道的那点事
- 安利10个让你爽到爆的IDEA必备插件,终获offer
- c++ vs2015 播放音乐_三星s20都取消了耳机孔,1k-2k的播放器会成为直推党新选择吗?...
- 【Python】使用Selenium实现淘宝抢单
- 常见DOS命令及开发工具
- 疫情持续两年多职场妈妈更努力存钱,近六成中国内地受访者储蓄可维持生活一年以上...
- nginx代理百度地图,实现内网展示百度地图
- 51Talk-Level 7 Unit 1 L2
- 从零实现一个RPC框架系列文章(二):11个类实现简单RPC
- .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)
热门文章
- 包头事业单位计算机考试试题,内蒙古包头市事业单位考试题库及答案(事业编笔试题库)...
- 【Python】列表、元组、字典的使用详解(增删改查)
- 【Python+OpenCV 图像的缩放和裁剪】
- MyBatis-Plus入门教程
- 2014年中国十大物联网公司排名
- 一些鲜为人知却非常实用的数据结构 - Haippy
- 阿里巴巴菜鸟网络二面
- 乐视网2018年净亏损40.96亿元 净资产为-30.26亿元
- vscode一格式化就报错?各种风格问题各种报错烦不胜烦,教你如何用好vue的eslint风格配置...
- 将Excel上千条数据写入到数据库中