基于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中利用Future对象回调别的函数示例代码
Sep 07 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
Django web框架使用url path name详解
Apr 29 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
详解用python计算阶乘的几种方法
Aug 14 Python
对django layer弹窗组件的使用详解
Aug 31 Python
Python实现微信机器人的方法
Sep 06 Python
深度学习详解之初试机器学习
Apr 14 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的一些小问题
2010/07/03 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
js拦截alert对话框另类应用
2013/01/16 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
python发送邮件实例分享
2017/07/28 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python学生管理系统学习笔记
2019/03/19 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
自主招生自荐信指南
2014/02/04 职场文书
入党自荐书范文
2014/03/09 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
还款承诺书范本
2015/01/20 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技