基于Python编写简易版的天天跑酷游戏的示例代码


Posted in Python onMarch 23, 2022

写出来的效果图就是这样了:

基于Python编写简易版的天天跑酷游戏的示例代码

下面就更新一下全部的代码吧

还是老样子先定义

import pygame,sys
import random

写一下游戏配置

width = 1200            #窗口宽度
height = 508            #窗口高度
size = width, height   
score=None              #分数
myFont=myFont1=None     #字体
surObject=None          #障碍物图片         
surGameOver=None        #游戏结束图片
bg=None                 #背景对象
role=None               #人物对象
object=None             #障碍物对象        
objectList=[]           #障碍物对象数组
clock=None              #时钟
gameState=None          #游戏状态(0,1)表示(游戏中,游戏结束)

写人物

class Role: #人物
    def __init__(self,surface=None,y=None):
        self.surface=surface
        self.y=y
        self.w=(surface.get_width())/12
        self.h=surface.get_height()/2
        self.currentFrame=-1
        self.state=0        #0代表跑步状态,1代表跳跃状态,2代表连续跳跃
        self.g=1            #重力加速度
        self.vy=0           #y轴速度       
        self.vy_start=-20   #起跳开始速度
    def getRect(self):
        return (0,self.y+12,self.w,self.h)

写障碍物

class Object:  #障碍物
    def __init__(self,surface,x=0,y=0):
        self.surface=surface
        self.x=x
        self.y=y
        self.w=surface.get_width()
        self.h=surface.get_height()
        self.currentFrame=random.randint(0,6)
        self.w = 100
        self.h = 100
    def getRect(self):
        return (self.x,self.y,self.w,self.h)
    def collision(self,rect1,rect2):
        #碰撞检测
        if (rect2[0]>=rect1[2]-20) or (rect1[0]+40>=rect2[2])or (rect1[1]+rect1[3]<rect2[1]+20) or (rect2[1]+rect2[3]<rect1[1]+20):
            return False
        return True

写背景

class Bg:   #背景
    def __init__(self,surface):
        self.surface=surface
        self.dx=-10
        self.w=surface.get_width()
        self.rect=surface.get_rect()
def initGame():
        
    global bg,role,clock,gameState,surObject,surGameOver,score,myFont,myFont1,objectList
    #分数初始化
    score=0
    #初始化
    objectList=[]
    #加载字体
    myFont=pygame.font.Font("./freesansbold.ttf",32)
    myFont1=pygame.font.Font("./freesansbold.ttf",64)   
    # 创建时钟对象 (可以控制游戏循环频率)
    clock = pygame.time.Clock()
    #初始化游戏状态
    gameState=0
    #游戏背景
    surBg=pygame.image.load("image/bg.bmp").convert_alpha()
    bg=Bg(surBg)
    #结束画面
    surGameOver=pygame.image.load("image/gameover.bmp").convert_alpha()
    #人物图片
    surRole=pygame.image.load("image/role.png").convert_alpha()  
    role=Role(surRole,508-85)
    #障碍物图片
    surObject=pygame.image.load("image/object.png").convert_alpha()  


def addObject():
    global surObject,object,objectList,object
    rate=4
    #是否生成障碍物
    if not random.randint(0,300)<rate:
        return
    y=random.choice([height-100,height-200,height-300,height-400])
    object=Object(surObject,width+40,y)
    objectList.append(object)


def updateLogic():
    global gameState,score
    #键盘事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             sys.exit()
        elif event.type==pygame.KEYDOWN:
            #空格键跳跃
            if gameState==0:
                if event.key==pygame.K_SPACE:
                    if role.state==0:
                        role.state=1
                        role.vy=role.vy_start
                    elif role.state==1:
                        role.state=2
                        role.vy=role.vy_start
            elif gameState==1:
                if event.key==pygame.K_SPACE:
                    #重新开始游戏
                    initGame()
                    
    if gameState==0:
        #背景的移动   
        bg.dx+=10
        if bg.dx==1200:
            bg.dx=0 
            
        #人物的移动  
        if role.state==0:    
            role.currentFrame+=1
            if role.currentFrame==12:
                role.currentFrame=0  
        else:
            role.y+=role.vy
            role.vy+=role.g 
            if role.y>=508-85:
                role.y=508-85
                role.state=0
        #障碍物的移动
        addObject()
        
        for object in objectList:
            object.x-=10     #障碍物移动
            # 障碍物超出屏幕,移除障碍物
            if object.x+object.w<=0:
                objectList.remove(object)
                score+=10    #避开障碍物,加10分
                print("移除了一个目标")   
            #碰撞检测
            if object.collision(role.getRect(),object.getRect()):
                if(object.currentFrame==6):
                    objectList.remove(object)
                    score+=100  #吃金币加100分
                    print(score)
                    print("吃了一个金币")
                else: 
                    gameState=1   #游戏失败
                    print("发生了碰撞!")

ok啦,这就是这个天天酷跑的全部代码啦。

到此这篇关于基于Python编写简易版的天天跑酷游戏的示例代码的文章就介绍到这了,更多相关Python跑酷游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python中的__init__和__new__
Mar 12 Python
python实现xlsx文件分析详解
Jan 02 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Django处理文件上传File Uploads的实例
May 28 Python
Python绘制的二项分布概率图示例
Aug 22 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
利用python进行文件操作
Dec 04 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
python周期任务调度工具Schedule使用详解
Nov 23 Python
Python中的嵌套循环详情
Mar 23 #Python
python装饰器代码解析
Mar 23 #Python
基于Python实现将列表数据生成折线图
Python必备技巧之字符数据操作详解
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 #Python
Python借助with语句实现代码段只执行有限次
Mar 23 #Python
python3 字符串str和bytes相互转换
Mar 23 #Python
You might like
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
基于jquery的15款幻灯片插件
2011/04/10 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
python的三目运算符和not in运算符使用示例
2014/03/03 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
python调用staf自动化框架的方法
2018/12/26 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
英文求职信结束语大全
2013/10/26 职场文书
单位门卫岗位职责
2013/12/20 职场文书
餐饮营销方案
2014/02/23 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
离婚案件答辩状
2015/05/22 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android