基于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解决字典中的值是列表问题的方法
Mar 04 Python
Python中的pprint折腾记
Jan 21 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python requests使用socks5的例子
Jul 25 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python设置代理和添加镜像源的方法
Feb 14 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
python 图像增强算法实现详解
Jan 24 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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
PHP 已经成熟
2006/12/04 PHP
php中取得文件的后缀名?
2012/02/20 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
详解puppeteer使用代理
2018/12/27 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python3 下载网络图片代码实例
2019/08/27 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
小学生通知书评语
2014/12/31 职场文书
未中标通知书
2015/04/17 职场文书
2019年教师入党申请书
2019/06/27 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android