基于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编写一个国际象棋AI程序
Nov 28 Python
python表格存取的方法
Mar 07 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
django的settings中设置中文支持的实现
Apr 28 Python
详解Python 切片语法
Jun 10 Python
如何定义TensorFlow输入节点
Jan 23 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
python查询MySQL将数据写入Excel
Oct 29 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
用PHP编写PDF文档生成器
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP中header用法小结
2016/05/23 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
python双向链表实现实例代码
2013/11/21 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
详解Python中is和==的区别
2019/03/21 Python
python os.fork() 循环输出方法
2019/08/08 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
金讯Java笔试题目
2013/06/18 面试题
公司应聘求职信
2014/06/21 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸