基于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类和函数中使用静态变量的方法
May 09 Python
python中异常报错处理方法汇总
Nov 20 Python
python实现画圆功能
Jan 25 Python
python3 爬取图片的实例代码
Nov 06 Python
python采集微信公众号文章
Dec 20 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Django框架验证码用法实例分析
May 10 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
OpenCV全景图像拼接的实现示例
Jun 05 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 时间日期操作实战
2011/08/26 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python实现排序算法解析
2018/09/08 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
英语硕士生求职简历的自我评价
2013/10/15 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
宣传口号大全
2014/06/16 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技