基于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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
Python实现的金山快盘的签到程序
Jan 17 Python
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
跟老齐学Python之编写类之四再论继承
Oct 11 Python
python列表操作实例
Jan 14 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python3.x爬虫下载网页图片的实例讲解
May 22 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python退火算法在高次方程的应用
Jul 26 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 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 观察者模式的实现代码
2013/05/10 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
浅谈PHP封装CURL
2019/03/06 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
javascript引用对象的方法
2007/01/11 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python使用爬虫猜密码
2016/02/19 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
领导干部群众路线对照检查材料
2014/11/05 职场文书
股权转让协议范本
2014/12/07 职场文书
道士塔读书笔记
2015/06/30 职场文书
欠条范文
2015/07/03 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android