基于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获取本机外网ip的方法
Apr 15 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python实现百度语音识别api
Apr 10 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
python简单操作excle的方法
Sep 12 Python
浅谈Python的list中的选取范围
Nov 12 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python包资源下载路径报404解决方案
Nov 05 Python
Python利器openpyxl之操作excel表格
Apr 17 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获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
php字符串操作常见问题小结
2016/10/11 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
新手入门常用代码集锦
2007/01/11 Javascript
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python删除文本中行数标签的方法
2018/05/31 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
Python timeit模块原理及使用方法
2020/10/10 Python
python中pivot()函数基础知识点
2021/01/03 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电