基于Python实现天天酷跑功能


Posted in Python onJanuary 06, 2021

感觉上次写的植物大战僵尸与俄罗斯方块的反应还不错,这次这个文章就更有动力了
这次就写一个天天酷跑吧

基于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 25 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
java中两个byte数组实现合并的示例
May 09 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python实现与redis交互操作详解
Apr 21 Python
Python控制台实现交互式环境执行
Jun 09 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python实现按日期归档文件
Jan 30 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 Python
python 下载文件的几种方法汇总
Jan 06 #Python
python 视频下载神器(you-get)的具体使用
Jan 06 #Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 #Python
如何在vscode中安装python库的方法步骤
Jan 06 #Python
如何利用python 读取配置文件
Jan 06 #Python
Pandas之缺失数据的实现
Jan 06 #Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 #Python
You might like
Protoss魔法科技
2020/03/14 星际争霸
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
python实现文件路径和url相互转换的方法
2015/07/06 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
大学生活动策划方案
2014/02/10 职场文书
小学生暑假家长评语
2014/04/17 职场文书
物理学专业自荐信
2014/06/11 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
商务邀请函
2015/01/30 职场文书
酒店辞职书范文
2015/02/26 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
小学班主任工作随笔
2015/08/15 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python