基于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 相关文章推荐
20招让你的Python飞起来!
Sep 27 Python
Python使用plotly绘制数据图表的方法
Jul 18 Python
Python enumerate索引迭代代码解析
Jan 19 Python
详解django三种文件下载方式
Apr 06 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
在notepad++中实现直接运行python代码
Dec 18 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 Python
python中filter,map,reduce的作用
Jun 10 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
php5.2.0内存管理改进
2007/01/22 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python中SQLite如何使用
2020/05/27 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
贷款承诺书范文
2014/05/19 职场文书
店铺转让协议书
2014/12/02 职场文书
建国大业观后感800字
2015/06/01 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫