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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
带你了解python装饰器
Jun 15 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python的常用模块之collections模块详解
Dec 06 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
详解如何设置Python环境变量?
May 13 Python
python字符串的拼接方法总结
Nov 18 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
一篇文章带你搞懂Python类的相关知识
May 20 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
twig模板获取全局变量的方法
2016/02/05 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
汽车广告策划方案
2014/05/31 职场文书
分公司负责人任命书
2014/06/04 职场文书
2014年会计工作总结
2014/11/27 职场文书
医生个人年度总结
2015/02/28 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL