基于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的Django框架中的数据过滤功能
Jul 17 Python
python 爬取微信文章
Jan 30 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
对Python发送带header的http请求方法详解
Jan 02 Python
Python3.5文件修改操作实例分析
May 01 Python
Python3简单实现串口通信的方法
Jun 12 Python
学python安装的软件总结
Oct 12 Python
Python实现word2Vec model过程解析
Dec 16 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 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
根德YB400的电路分析
2021/03/02 无线电
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
python正则表达式中的括号匹配问题
2014/12/14 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python中字符串的修改及传参详解
2016/11/30 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
印度购物网站:TATA CLiQ
2017/11/23 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
七年级地理教学计划
2015/01/22 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
python函数的两种嵌套方法使用
2022/04/02 Python