基于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中的测试模块unittest和doctest的使用教程
Apr 14 Python
python连接字符串的方法小结
Jul 13 Python
Python手机号码归属地查询代码
May 04 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
简单了解Python中的几种函数
Nov 03 Python
Python分析学校四六级过关情况
Nov 22 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
python实现C4.5决策树算法
Aug 29 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 Python
Python学习之os包使用教程详解
Mar 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
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
js实现可拖动DIV的方法
2013/12/17 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
js中开关变量使用实例
2017/02/24 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
js实现点赞效果
2020/03/16 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python中random模块详解
2021/03/01 Python
.net笔试题
2014/03/03 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
写给女生的道歉信
2014/01/14 职场文书
劳资协议书范本
2014/04/23 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
上甘岭观后感
2015/06/10 职场文书
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android