基于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编码示例
Jan 16 Python
Python中的True,False条件判断实例分析
Jan 12 Python
python @property的用法及含义全面解析
Feb 01 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
Aug 22 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
python 实现两个线程交替执行
May 02 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 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验证码(支持中文)
2007/02/14 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
css配合jquery美化 select
2013/11/29 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
python爬取网页内容转换为PDF文件
2020/07/28 Python
python3使用GUI统计代码量
2019/09/18 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
怎么写工作检讨书
2014/11/16 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js