基于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中的type()方法的使用
May 21 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
Python实现单词翻译功能
Jun 06 Python
Python实现字典去除重复的方法示例
Jul 31 Python
用Python解决x的n次方问题
Feb 08 Python
python字典的常用方法总结
Jul 31 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
django跳转页面传参的实现
Sep 17 Python
python库sklearn常用操作
Aug 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
php分页思路以及在ZF中的使用
2012/05/30 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
python和bash统计CPU利用率的方法
2015/07/10 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
python实现FTP循环上传文件
2020/03/20 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
python如何变换环境
2020/07/21 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
学习“七一”讲话精神体会
2014/07/08 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015中秋祝酒词
2015/08/12 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
vue3中provide && inject的使用
2021/07/01 Vue.js
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫