python编写五子棋游戏


Posted in Python onMay 25, 2021

本文实例为大家分享了python编写五子棋游戏的具体代码,供大家参考,具体内容如下

游戏代码及部分注释

import pygame        #导入pygame游戏模块
import time           #调用time库
import sys
from pygame.locals import *

initChessList = []          #保存的是棋盘坐标
initRole = 1                #1:代表白棋; 2:代表黑棋
resultFlag = 0              #结果标志

class StornPoint():
    def __init__(self,x,y,value):
        '''
        :param x: 代表x轴坐标
        :param y: 代表y轴坐标
        :param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子
        '''
        self.x = x            #初始化成员变量
        self.y = y
        self.value = value

def initChessSquare(x,y):     #初始化棋盘
    for i in range(15):       # 每一行的交叉点坐标
        rowlist = []
        for j in range(15):   # 每一列的交叉点坐标
            pointX = x+ j*40
            pointY = y+ i*40
            sp = StornPoint(pointX,pointY,0)
            rowlist.append(sp)
        initChessList.append(rowlist)

def eventHander():            #监听各种事件
    for event in pygame.event.get():
        global initRole
        if event.type == QUIT:#事件类型为退出时
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN: #当点击鼠标时
            x,y = pygame.mouse.get_pos()  #获取点击鼠标的位置坐标
            i=0
            j=0
            for temp in initChessList:
                for point in temp:
                    if x>=point.x-10 and x<=point.x+10 and y>=point.y-10 and y<=point.y+10:
                        if point.value == 0 and initRole == 1:   #当棋盘位置为空;棋子类型为白棋
                            point.value = 1             #鼠标点击时,棋子为白棋
                            judgeResult(i,j,1)
                            initRole = 2                #切换角色
                        elif point.value == 0 and initRole ==2:  #当棋盘位置为空;棋子类型为黑棋
                            point.value = 2             #鼠标点击时,棋子为黑棋
                            judgeResult(i,j,2)
                            initRole = 1                #切换角色
                        break
                    j+=1
                i+=1
                j=0

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

    # 先判断东北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(右斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
    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

    # 2、判断西北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(左斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
    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


    if flag:               #如果条件成立,证明五子连珠
        resultFlag = value #获取成立的棋子颜色
        print("白棋赢" if value ==1 else "黑棋赢")

# 加载素材
def main():
    global initChessList,resultFlag
    initChessSquare(27,27)
    pygame.init()     # 初始化游戏环境
    screen = pygame.display.set_mode((620,620),0,0)          # 创建游戏窗口 # 第一个参数是元组:窗口的长和宽
    pygame.display.set_caption("陈晓超五子棋")                # 添加游戏标题
    background = pygame.image.load("D:/cxc/4.png")          #加载背景图片
    whiteStorn = pygame.image.load("D:/cxc/2.png") #加载白棋图片
    blackStorn = pygame.image.load("D:/cxc/1.png") #加载黑棋图片
    resultStorn = pygame.image.load("D:/cxc/3.png")#加载 赢 时的图片
    rect = blackStorn.get_rect()

    while True:
        screen.blit(background,(0,0))
        for temp in initChessList:
            for point in temp:
                if point.value == 1:          #当棋子类型为1时,绘制白棋
                    screen.blit(whiteStorn,(point.x-18,point.y-18))
                elif point.value == 2:        #当棋子类型为2时,绘制黑棋
                    screen.blit(blackStorn,(point.x-18,point.y-18))

        if resultFlag >0:
            initChessList = []                 # 清空棋盘
            initChessSquare(27,27)             # 重新初始化棋盘
            screen.blit(resultStorn,(200,200)) #绘制获胜时的图片
        pygame.display.update()                #更新视图

        if resultFlag >0:
            time.sleep(3)
            resultFlag = 0                     #置空之前的获胜结果
        eventHander()                          #调用之前定义的事件函数
if __name__ == '__main__':
    main()        #调用主函数绘制窗口
    pass

运行后就会出现游戏的窗口,像这样:

python编写五子棋游戏

我们可以任意的在棋盘上落子,像这样:

python编写五子棋游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之for循环语句
Oct 02 Python
python实现堆和索引堆的代码示例
Mar 19 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
在ipython notebook中使用argparse方式
Apr 20 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
Python高并发和多线程有什么关系
Nov 14 Python
聊一聊python常用的编程模块
May 14 Python
Python中re模块的元字符使用小结
Apr 07 Python
python高温预警数据获取实例
Jul 23 Python
浅谈python数据类型及其操作
对Keras自带Loss Function的深入研究
May 25 #Python
pytorch中的model=model.to(device)使用说明
May 24 #Python
解决pytorch-gpu 安装失败的记录
May 24 #Python
如何解决.cuda()加载用时很长的问题
一劳永逸彻底解决pip install慢的办法
May 24 #Python
Django实现翻页的示例代码
May 24 #Python
You might like
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
js 操作css实现代码
2009/06/11 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python用GET方法上传文件
2015/03/10 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
如何理解python面向对象编程
2020/06/01 Python
Django REST 异常处理详解
2020/07/15 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
爱耳日活动总结
2014/04/30 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
加薪通知
2015/04/25 职场文书
综治目标管理责任书
2015/05/11 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
python 中的@运算符使用
2021/05/26 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript