基于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 26 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
python异步存储数据详解
Mar 19 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python读取实时数据流示例
Dec 02 Python
500行python代码实现飞机大战
Apr 24 Python
python中JWT用户认证的实现
May 18 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
python包的导入方式总结
Mar 02 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
解析link_mysql的php版
2013/06/30 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
JS的replace方法详细介绍
2012/11/09 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
vue 全局环境切换问题
2019/10/27 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
Python帮你识破双11的套路
2019/11/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
大学生自我评价范文
2015/03/03 职场文书
学校社团活动总结
2015/05/07 职场文书
专项资金申请报告
2015/05/15 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
Java 关于String字符串原理上的问题
2022/04/07 Java/Android