当前位置: 首页 > news >正文

用 Python 写了一个天天酷跑(附源码)

Hello,大家好,给大家说一下,我要开始装逼了

这期写个天天酷跑玩一下叭!

制作一个完整的“天天酷跑”游戏涉及很多方面,包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言,它有许多库和框架可以用来制作游戏。一个流行的选择是使用Pygame库。

写出来的效果图就是这样的

下面就更新一下全部的代码吧!

老样子先定义

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=surfaceself.y=yself.w=(surface.get_width())/12self.h=surface.get_height()/2self.currentFrame=-1self.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=surfaceself.x=xself.y=yself.w=surface.get_width()self.h=surface.get_height()self.currentFrame=random.randint(0,6)self.w = 100self.h = 100def 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 Falsereturn True

写背景

class Bg:   #背景def __init__(self,surface):self.surface=surfaceself.dx=-10self.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,objectrate=4#是否生成障碍物if not random.randint(0,300)<rate:returny=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=1role.vy=role.vy_startelif role.state==1:role.state=2role.vy=role.vy_startelif gameState==1:if event.key==pygame.K_SPACE:#重新开始游戏initGame()if gameState==0:#背景的移动   bg.dx+=10if bg.dx==1200:bg.dx=0 #人物的移动  if role.state==0:    role.currentFrame+=1if role.currentFrame==12:role.currentFrame=0  else:role.y+=role.vyrole.vy+=role.g if role.y>=508-85:role.y=508-85role.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啦,这就是这个天天酷跑的全部代码啦.

注意事项

  1. 图像资源:你需要准备player.pngobstacle.pngbackground.png这三个图像文件,并放置在代码运行的同一目录下。
  2. 游戏逻辑:这个示例代码只包含非常基本的游戏逻辑和元素。一个完整的游戏还需要添加更多功能,如得分系统、多个障碍物类型、不同的游戏关卡、音效等。
  3. 优化和调试:在开发过程中,你可能需要不断地优化和调试代码,以确保游戏的流畅性和稳定性。

这个示例只是一个起点,你可以根据需要进行扩展和完善。希望这个示例对你有所帮助!

 全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

在这里插入图片描述

最后

如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

全套资料已经打包好了,朋友们如果需要可以搓蓝色字体免费获得【保证100%免费】

希望这篇文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。
————————————————


http://www.mrgr.cn/news/71256.html

相关文章:

  • 利用 GitHub 和 Hexo 搭建个人博客【保姆教程】
  • 第十章总结blog
  • Linux KASLR 地址偏移
  • 什么是 C++ 中的智能指针?有哪些类型的智能指针?
  • 问题定位学习
  • 【经纬度转地址实现方案】根据给定的经纬度,查询对应城市,通过建立经纬度geohash-行政区映射表,实现快速查询
  • 将webserver部署到公网(使用阿里云服务器)
  • 摄像机实时接入分析平台LiteAIServer视频智能分析软件裸土检测算法实施及应用
  • API架构解说
  • 线程状态转换?创建线程的几种方式?线程如何停止?
  • 分享一些Kafka集群优化的最佳实践?
  • 社交媒体的隐私新标准:Facebook的数据保护策略
  • MySQL:left join后用on与where的区别
  • epoch,batch_size等参数的理解
  • Qt 正则表达式提取文件中的 USB 设备 ID
  • 如何一步步获得文心一言API密钥
  • 350. 两个数组的交集 II
  • 【网络】HTTP 协议
  • AI绘画如何变现,掌握这几个方法实现经济自由!
  • Day 62 || prim算法、kruskal算法
  • Select,poll,epoll和IO多路复用和NIO
  • 手写JDK动态代理实现AOP
  • 深入浅出 ChatGPT 底层原理:Transformer
  • 小型内衣洗衣机哪个牌子好?五大超值优等品速来围观!
  • 工业拍卖平台、信息发布、租赁商城平台系统适用于全行业解决方案。
  • ChatGPT登录失败的潜在原因分析