基于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多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Python模块文件结构代码详解
Feb 03 Python
Python闭包函数定义与用法分析
Jul 20 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
Python return语句如何实现结果返回调用
Oct 15 Python
Python入门之使用pandas分析excel数据
May 12 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 smarty模版引擎中的缓存应用
2009/12/02 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
JS 表单验证大全
2011/11/23 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
自荐信模版
2013/10/24 职场文书
高中毕业自我鉴定
2013/12/16 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
技术员岗位职责范本
2015/04/11 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Redis的字符串是如何实现的
2021/10/24 Redis