基于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 base64 decode incorrect padding错误解决方法
Jan 08 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Django中几种重定向方法
Apr 28 Python
Python中subprocess的简单使用示例
Jul 28 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python 调用Java实例详解
Jun 02 Python
使用requests库制作Python爬虫
Mar 25 Python
python基于http下载视频或音频
Jun 20 Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
利用python 读写csv文件
Sep 10 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 随机排序广告的实现代码
2011/05/09 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
JS 强制设为首页的代码
2009/01/31 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
深入研究React中setState源码
2017/11/17 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
Python中使用不同编码读写txt文件详解
2015/05/28 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
通知函的格式
2015/04/27 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis