基于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之编写类之一创建实例
Oct 11 Python
Python实现CET查分的方法
Mar 10 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
详解如何使用Python编写vim插件
Nov 28 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
python的常用模块之collections模块详解
Dec 06 Python
python实现维吉尼亚加密法
Mar 20 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python产生模拟数据faker库的使用详解
Nov 04 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部分常见问题总结
2008/03/27 PHP
php 变量定义方法
2009/06/14 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python读取LMDB中图像的方法
2018/07/02 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
培训通知
2015/04/17 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
java实现面板之间切换功能
2022/06/10 Java/Android