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应用的教程
Apr 16 Python
python实现统计代码行数的方法
May 22 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python做简单的字符串匹配详解
Mar 21 Python
使用python遍历指定城市的一周气温
Mar 31 Python
简单的python后台管理程序
Apr 13 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
Django程序的优化技巧
Apr 29 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
2006/10/09 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python检测lvs real server状态
2014/01/22 Python
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
用python对oracle进行简单性能测试
2020/12/05 Python
比利时家具购买网站:Home24
2019/01/03 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
党员个人整改措施
2014/10/24 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
Windows server 2012搭建FTP服务器
2022/04/29 Servers