python 单机五子棋对战游戏


Posted in Python onApril 28, 2022

 引入pygame模块

 # 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/result.jpg')
    winStornB = pygame.image.load('images/result.jpg')
 
    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 单机五子棋对战游戏

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Python 相关文章推荐
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
python读取oracle函数返回值
Jul 18 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
Django中Middleware中的函数详解
Jul 18 Python
python通过matplotlib生成复合饼图
Feb 06 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
python中最小二乘法详细讲解
Feb 19 Python
解决python3安装pandas出错的问题
May 20 Python
python井字棋游戏实现人机对战
Apr 28 #Python
Python开发五子棋小游戏
Python简易开发之制作计算器
Apr 28 #Python
Python实现对齐打印 format函数的用法
Apr 28 #Python
python实现简单的三子棋游戏
Apr 28 #Python
Python内置类型集合set和frozenset的使用详解
使用Python获取字典键对应值的方法
Apr 26 #Python
You might like
php 模拟POST提交的2种方法详解
2013/06/17 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
node的process以及child_process模块学习笔记
2018/03/06 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Python中无限循环需要什么条件
2020/05/27 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
审计主管岗位职责
2014/01/31 职场文书
爱国口号
2014/06/19 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
西安兵马俑导游词
2015/02/02 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
基于Python实现西西成语接龙小助手
2022/08/05 Golang