基于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 图片验证码代码分享
Jul 04 Python
python进阶教程之动态类型详解
Aug 30 Python
初步讲解Python中的元组概念
May 21 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
利用Django模版生成树状结构实例代码
May 19 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
教你使用TensorFlow2识别验证码
Jun 11 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 strtotime函数详解
2009/12/18 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
Prototype Selector对象学习
2009/07/23 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
EsLint入门学习教程
2017/02/17 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python3中函数参数的四种简单用法
2018/07/09 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
网络技术专业求职信
2014/02/18 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
公司踏青活动方案
2014/08/16 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
检讨书范文1000字
2015/01/28 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2015年采购员工作总结
2015/04/27 职场文书
地道战观后感
2015/06/04 职场文书
文艺演出主持词
2015/07/01 职场文书