【Python游戏】震惊,csdn小编居然用Python实现一个天天酷跑小游戏 | 附源码

news2024/12/26 21:50:28

前言

halo,包子们上午好
很多小伙伴还记得我们曾经的timi 天天酷跑 嘛
今天小编直接用Python给大家整一个天天酷跑小游戏
真的超级得劲哟
废话不多说,直接上才艺
在这里插入图片描述

相关文件

关注小编,私信小编领取哟!
当然别忘了一件三连哟~~
公众号:Python日志
会不定期更新学习资料和源码哟

源码点击蓝色字体领取
Python零基础入门到精通视频合集

【整整800集】Python爬虫项目零基础入门合集,细狗都学会了,你还不会?

开发工具

Python版本:3.7.8
相关模块:
pygame模块;
random模块;
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

效果展示

在这里插入图片描述
在这里插入图片描述

代码展示

导入模块

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("发生了碰撞!")



  
    
       
def updateView(screen):
    #背景的贴图
    screen.blit(bg.surface,[-bg.dx,0])
    screen.blit(bg.surface,[1200-bg.dx,0])
    #分数的贴图
    textSur=myFont.render("score:%d"%score, True, (128, 128, 128))
    screen.blit(textSur, (500,20))
    del textSur
    #人物的贴图
    screen.blit(role.surface, [0, role.y], [int(role.currentFrame) * role.w, 0, role.w, role.h])   
    #障碍物的贴图
    for object in objectList:
        screen.blit(object.surface, [object.x, object.y], [int(object.currentFrame) * object.w, 0, object.w, object.h])   
         
     
def judgeState(screen):
    global gameState
    if gameState==0:
        updateView(screen)
        return
    elif gameState==1:
        screen.blit(surGameOver,[0,0])
        textSur = myFont1.render("GameOver Score:%d"%score, True, (255, 0, 0))
        screen.blit(textSur, (width/2-350, height/2+150))
                     
def main():
    # 音乐的路径
    file = r'music.mp3'
    # 初始化
    pygame.mixer.init()
    # 加载音乐文件
    track = pygame.mixer.music.load(file)
    # 开始播放音乐流
    pygame.mixer.music.play()

    pygame.init()
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption('天天酷跑 公众号:Python日志 资料源码获取QQ群:494958217')
    initGame()
    screen.blit(bg.surface,[0,0])
    while True:
        #设置时钟频率
        clock.tick(60)  
              
        judgeState(screen)
        updateLogic()  
        pygame.display.flip()

main()

总结

效果还是比较明显的,实现起来也是比较简单的,源码获取看相关文件哟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML大学班级活动网页设计 、大学校园HTML实例网页代码 、本实例适合于初学HTML的同学

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Qt 官方示例学习:dragdroprobot

参考链接 Qt开发技术&#xff1a;图形视图框架&#xff08;二&#xff09;场景QGraphicsScene、QGraphicsItem与QGraphicsView详解QGraphicsScene的功能 程序运行效果 要点 模块拆分 界面方面可以分为两个大体&#xff0c;色盘与机器人&#xff1b; 主体界面 使用 QGraph…

破译大脑的黑匣子,离不开这把“钥匙”

得了脑卒中&#xff0c;身体还能恢复如初吗&#xff1f; 这个真实的案例&#xff0c;也许会给很多人带去欣慰。2022年吉林大学第一医院的一位脑卒中患者&#xff0c;从入院到手术完成只用了75分钟&#xff0c;三周后完全康复&#xff0c;回归正常生活。 以计算之力守护生命之光…

聚观早报 | Apple Music推出新功能;苹果汽车最早于2026年发布

今日要闻&#xff1a;苹果Apple Music推出新功能&#xff1b;微软向索尼提供10年游戏协议&#xff1b;Adobe裁员约百人以削减成本&#xff1b;苹果汽车最早于2026年发布&#xff1b;微软考虑开发一款“超级应用”苹果Apple Music推出新功能 12 月 7 日消息&#xff0c;据报道&a…

[附源码]Python计算机毕业设计Django智慧园区运营管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Jetson NX 增加 swap空间

在开启多路测试的时候&#xff0c;发现SWAP空间不够了&#xff0c;板子非常的卡&#xff0c;解决的办法就是增加SWAP空间。 增加空间 生成swapfile文件操作如下 #新增swapfile文件大小自定义 sudo fallocate -l 4G /var/swapfile #配置该文件的权限 sudo chmod 600 /var/swa…

2023中国AIoT产业全景图谱报告发布,小匠物联荣获行业先锋大奖

12月7日&#xff0c;由智次方主办的「中国AIoT产业年会」在深圳成功举办。与会嘉宾包括原国务院参事石定寰、中国工程院院士倪光南、中国工程院院士张平、亚信集团联合创始人田溯宁等各个领域重量级专家。小匠物联作为参展单位&#xff0c;出席本次大会&#xff0c;并获得了年会…

深入理解Linux网络技术内幕(十二)——中断事件一般性参考数据

文章目录前言统计数据通过/proc和sysfs文件系统调整本部分涉及的函数和变量本部分涉及的文件和目录前言 这篇博客的内容不是很多&#xff0c;主要是介绍几种一般性信息&#xff0c;适用于前面所讲涉及中断事件和帧的处理 统计数据 有关帧接收的统计数据保存在各个CPU数组net…

SMOKE模型排放清单处理技术及在多模式下实践应用方法与VOCs排放量核算

【查看原文】SMOKE模型排放清单处理技术及在多模式下实践应用方法与VOCs排放量核算 随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。近年来&#xff0c;严重的大气污染问题已经明显影响国计民生&#xff0c;引起政府、学界和人们越来越多的关注。大气污染…

嵌入式开发为啥不适合macOS系统?

关注星标公众号&#xff0c;不错过精彩内容作者 | strongerHuang微信公众号 | strongerHuangMac电脑适合做嵌入式开发吗&#xff1f;不定期有小伙伴问我类似的问题&#xff0c;我的回答是&#xff1a;不适合&#xff01;至于为什么&#xff0c;只要你用心观察一下身边做嵌入式软…

入行必看:数字后端工程师有哪些就业机会?

今年高校毕业生人数首破千万&#xff0c;对于即将踏入IC这个行业的应届生来说&#xff0c;今年的就业形势不大乐观。 很多迷茫的同学问了我一些问题&#xff1a; 如果我开始做一名后端工程师&#xff0c;5年后我会做些什么&#xff1f;我能切换到一个设计的工作吗&#xff1f…

数据图表工具-FineReport数字控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入数字信息&#xff08;整数、负数、小数&#xff09;&#xff0c;录入填报的数据&#xff0c;如下图所示&#xff1a; 1.2.2 参数控件 参数面板处可以通过该…

[附源码]Python计算机毕业设计SSM基于网络C++实验管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

只会用 Go 写 O(N²) 的冒泡排序算法?来看看优化后最好情况下的 O(N) 算法吧

只会用 Go 写 O N 的冒泡排序算法&#xff1f;来看看优化后最好情况下的 O N 算法吧冒泡排序图片演示普通的冒泡排序算法优化算法小结耐心和持久胜过激烈和狂热。 哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的内容是使用 Go 实现冒泡排序算法。如果本文对你有帮助&…

单商户商城系统功能拆解43—应用中心—门店自提

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

岗位认识---算法工程师、数据分析

1&#xff0c;算法工程师 1.1 定义 AI算法 算法能力工程能力业务能力 算法工程师 算法职位名称&#xff1a; 算法工程师&#xff08;机器学习大类&#xff09; NLP&#xff08;自然语言处理&#xff09;算法工程师 CV&#xff08;计算机视觉&#xff09;算法工程师 CG&…

Vision Transformer with Deformable Attention

论文地址&#xff1a;https://arxiv.org/abs/2201.00520 代码地址&#xff1a;https://github.com/LeapLabTHU/DAT Abstract Transformers 最近在各种视觉任务上表现出了卓越的性能。大的&#xff0c;有时甚至是全局的感受野赋予了 Transformer 模型比 CNN 模型更高的表示能力…

Kubelet v1.25.x源码——syncLoop

1. 环境说明 Kubernetes源码版本&#xff1a;remotes/origin/release-1.25 Kubernetes编译出来的Kubelet版本&#xff1a;Kubernetes v1.24.0-beta.0.2463ee7799bab469d7 Kubernetes集群实验环境&#xff1a;使用Kubernetes v1.25.4二进制的方式搭建了一个单节点集群 K8S 单节…

RNA-seq 详细教程: `DESeq2` 差异表达分析(7)

学习目标 了解如何设计公式了解如何使用 DESeq2 执行差异表达分析1. DE 分析 差异表达分析工作流程的最后一步是将原始计数拟合到 NB 模型并对差异表达基因进行统计检验。在这一步中&#xff0c;我们本质上是想确定不同样本组的平均表达水平是否存在显著差异。 Paul Pavlidis, …

C语言第二十课:实用调试技巧

目录 前言&#xff1a; 一、Bug&#xff1a; 二、调试&#xff1a; 1.调试是什么&#xff1a; 2.调试的基本步骤&#xff1a; 3. Debug 与 Release &#xff1a; 三、在Windows环境下进行调试&#xff1a; 1.调试环境的准备&#xff1a; 2.调试的快捷键&#xff1a; 3.调试…