基于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程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python连接mongodb密码认证实例
Oct 16 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 Python
Python开发五子棋小游戏
Apr 28 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
模仿OSO的论坛(四)
2006/10/09 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
jstree的简单实例
2016/12/01 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python中正则表达式的使用方法
2018/02/25 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
详解Python传入参数的几种方法
2019/05/16 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
高三毕业典礼演讲稿
2014/05/13 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
导游词范文
2015/02/13 职场文书