基于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二叉树的实现实例
Nov 21 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
django基础学习之send_mail功能
Aug 07 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
python类中super() 的使用解析
Dec 19 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
python爬虫之selenium库的安装及使用教程
May 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
很实用的一个完整email发送程序
2006/10/09 PHP
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
jquery+css实现下拉列表功能
2017/09/03 jQuery
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
Python enumerate函数功能与用法示例
2019/03/01 Python
python实现简单坦克大战
2020/03/27 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
博士生求职信
2014/07/06 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
公司业务员管理制度
2015/08/05 职场文书
创业计划书之家教中心
2019/09/25 职场文书
JavaScript原型链详解
2021/11/07 Javascript
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android