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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Python中lambda的用法及其与def的区别解析
Jul 28 Python
Python打印斐波拉契数列实例
Jul 07 Python
python与caffe改变通道顺序的方法
Aug 04 Python
Python将string转换到float的实例方法
Jul 29 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
Django中提示消息messages的设置方式
Nov 15 Python
解决Python二维数组赋值问题
Nov 28 Python
Python tkinter和exe打包的方法
Feb 05 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
python缩进长度是否统一
Aug 02 Python
对PyTorch中inplace字段的全面理解
May 22 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Python中的自定义函数学习笔记
2014/09/23 Python
python服务器与android客户端socket通信实例
2014/11/12 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
Django REST framework 视图和路由详解
2019/07/19 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
股权投资意向书
2014/04/01 职场文书
情人节寄语大全
2014/04/11 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
优质护理服务心得体会
2016/01/22 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书