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实现单机版五子棋对战相关推荐

  1. python 播放mp3模块_Python基于pygame模块播放MP3的方法示例

    1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...

  2. Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk

    Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame2.0.1, pymunk5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏 ...

  3. Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款

    Python网上商城源代码,基于Django+MySQL+Redis,支持支付宝付款,实现:用户登录注册,商品展示,商品详情界面,搜索商品,将不同尺寸颜色数量的商品加入购物车,购物车管理,地址管理,形 ...

  4. python pygame字体设置_Python基于pygame实现的font游戏字体(附源码)

    本文实例讲述了Python基于pygame实现的font游戏字体.分享给大家供大家参考,具体如下: 在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中 ...

  5. python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏

    基于 pygame 设计贪吃蛇游戏 贪吃蛇游戏通过玩家控制蛇移动,不断吃到食物增长,直到碰到蛇身或边界游戏结束.其运行效果如下所示: 游戏开始时,先导入可能需要用到的包. import time im ...

  6. Python小项目俄罗斯方块代码基于pygame编写

    python实习作业或者期末作业,俄罗斯方块,基于pygame编写 有很多小伙伴想要找一些小项目练练手,下面是我在闲暇时写的一个俄罗斯方块的一个小游戏,它是基于pygame板块来实现的 这是它的首页界 ...

  7. python五子棋单机版源代码_python实现单机五子棋

    简介 这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏.面向新手. 程序主要包括两个部分,图形创建与逻辑编写两部分. 程序的运行结果: 样式创建 老规矩,先 ...

  8. python五子棋单机版源代码_python 五子棋 游戏源码(python 2.7入门级)

    [实例简介] [实例截图] [核心代码] from Tkinter import * from tkMessageBox import * class Game: def __init__(self) ...

  9. python怎么建立画板_Python基于opencv实现的简单画板功能示例

    本文实例讲述了Python基于opencv实现的简单画板功能.分享给大家供大家参考,具体如下: import cv2 import numpy as np drawing = False # true ...

最新文章

  1. 我都陪你坐了一天了,你好歹说句话啊!吖的,谱也忒大了。。。
  2. SAP S4 BP事务代码的业务伙伴和供应商,客户之间的表关系
  3. NEO智能合约反编译工具
  4. dedeCMS,标准的MVC框架运行原理和缓存
  5. 文件内容查找java,java库从文件内容中查找mime类型
  6. nginx四层端口转发
  7. JavaScript函数小集锦
  8. mysql_install_db卸载_MySQL数据库的卸载与安装
  9. OJ1012: 求绝对值
  10. Java学习日报—Java并发—2021/11/22
  11. 函数节流你应该知道的那点事
  12. 安利10个让你爽到爆的IDEA必备插件,终获offer
  13. c++ vs2015 播放音乐_三星s20都取消了耳机孔,1k-2k的播放器会成为直推党新选择吗?...
  14. 【Python】使用Selenium实现淘宝抢单
  15. 常见DOS命令及开发工具
  16. 疫情持续两年多职场妈妈更努力存钱,近六成中国内地受访者储蓄可维持生活一年以上...
  17. nginx代理百度地图,实现内网展示百度地图
  18. 51Talk-Level 7 Unit 1 L2
  19. 从零实现一个RPC框架系列文章(二):11个类实现简单RPC
  20. .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)

热门文章

  1. 包头事业单位计算机考试试题,内蒙古包头市事业单位考试题库及答案(事业编笔试题库)...
  2. 【Python】列表、元组、字典的使用详解(增删改查)
  3. 【Python+OpenCV 图像的缩放和裁剪】
  4. MyBatis-Plus入门教程
  5. 2014年中国十大物联网公司排名
  6. 一些鲜为人知却非常实用的数据结构 - Haippy
  7. 阿里巴巴菜鸟网络二面
  8. 乐视网2018年净亏损40.96亿元 净资产为-30.26亿元
  9. vscode一格式化就报错?各种风格问题各种报错烦不胜烦,教你如何用好vue的eslint风格配置...
  10. 将Excel上千条数据写入到数据库中