用python做游戏的细节详解


Posted in Python onJune 25, 2019

PyGame是一个Python的库,能够让你更容易的写出一个游戏。它提供的功能包括图片处理和声音重放的功能,并且它们能很容易的整合进你的游戏里。去官网点击这里下载适合你的PyGame安装包。

大家可以参阅:Python中pygame安装方法图文详解

我们就拿打飞机来做个例子

1 .创建游戏框架以及游戏背景

#这个模块放一些常用的工具和基础类和精灵类

#在其他模块调用

import pygame

import random

#设置游戏屏幕大小 这是一个常量

SCREEN_RECT = pygame.Rect(0,0,580,700)

#敌机的定时器事件常量

CREATE_ENEMY_EVENT = pygame.USEREVENT

 

#定制一个精灵类,需要继承pygame提供的精灵类

#需要定义的属性有:

#image图片 

#rect坐标

#speed速度

 

#接下来开始写敌机方面的内容 产生敌机

#先定义一个事件常量

CREATE_ENEMY_EVENT = pygame.USEREVENT

#我们还可以定义一个事件常量(发射子弹)

HERO_FIRE_EVENT = pygame.USEREVENT + 1

 

class GameSprite(pygame.sprite.Sprite):

  def __init__(self,new_image,new_speed=1):

    super().__init__()

    #图片

    self.image = pygame.image.load(new_image)

    #速度

    self.speed = new_speed

    #位置 获取图片的宽和高 get_rect()(0,0,宽,高)

    self.rect = self.image.get_rect()

    #精灵移动的速度 包括英雄精灵 背景精灵 敌机精灵 子弹精灵

    self.speed = new_speed

 

  def update(self):

    #默认垂直方向移动 y轴控制垂直方向

    self.rect.y += self.speed

    #self.rect.x += 1

#以上是游戏的基础类,接下来设置背景类

#明确背景类继承自游戏的精灵类

class Background(GameSprite):

  def __init__(self,is_alt = False):

    #is_alt判断是否为另一张图像

    #False表示第一张图像

    #Ture表示另外一张图像

    #两张图像交替循环

    #传图片

    super().__init__("/home/zhangyuan/下载/beijing.png")

    if is_alt:

      #如果是第二张图片 初始位置为-self.rect.height

      self.rect.y = -self.rect.height

  #def __init__(self,new_image):

  #  super().init__(new_image)

  def update(self):

    #调用父类方法

    super().update()

    if self.rect.y >= SCREEN_RECT.height:

      self.rect.y = -self.rect.height

2 .创建敌机精灵

class Enemy(GameSprite):

  def __init__(self):

 

  super().__init__("/home/zhangyuan/images/enemy1.png")

  #随机速度

  self.speed = random.randint(10, 15)

  #设置敌机的初始位置

  self.rect.left = SCREEN_RECT.width

  max_ = SCREEN_RECT.height -self.rect.height

  self.rect.bottom = random.randint(0, max_)

 

def update(self):

   

  panduan = random.randint(0, 1)

  if panduan == 0:

    self.rect.y -= self.speed

    self.rect.x -= self.speed

  else:

    self.rect.y += self.speed

    self.rect.x -= self.speed

  #判断敌机是否飞出屏幕 如果飞出屏幕将敌机从精灵组删除

  if self.rect.y >= SCREEN_RECT.height or self.rect.right <=0 or self.rect.bottom <=0:

    self.kill()

3 .创建英雄精灵

class Bullet(GameSprite):

 

    def __init__(self):

      super().__init__("/home/zhangyuan/images/bullet1.png",-5)

    def update(self):

      super().update()

 

   #判断是否超出屏幕 如果是 从精灵组删除

   if self.rect.bottom < 0:

     self.kill()

5 .碰撞检测

#第一个参数和第二个参数是要参与碰撞检测的精灵

#第三个参数为Ture的时候 就是当碰撞的时候被碰撞的精灵从精灵组移除

pygame.sprite.groupcollide( self.enemy_group,self.hero.bullet, True, True)#子弹

#判断列表时候有内容

  if len(enemies)>0:

    #让英雄牺牲

    self.hero.kill()

    #结束游戏

    PlaneGame.__game_over()

@staticmethod

def __game_over():

  print("游戏结束")

  #这是pygame提供的卸载模块功能

  pygame.quit()

  #这是pygame本身提供的退出脚本的功能

  exit()

  #需要先卸载pygame模块 然后退出脚本

 

  if __name__ == "__main__":

   game = PlaneGame()

   game.star_game()
Python 相关文章推荐
python练习程序批量修改文件名
Jan 16 Python
简介Python中用于处理字符串的center()方法
May 18 Python
Python标准库之collections包的使用教程
Apr 27 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
python3.5基于TCP实现文件传输
Mar 20 Python
自学python的建议和周期预算
Jan 30 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
python交互模式基础知识点学习
Jun 18 Python
重构Python代码的六个实例
Nov 25 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 #Python
python print出共轭复数的方法详解
Jun 25 #Python
python安装pil库方法及代码
Jun 25 #Python
Python处理时间日期坐标轴过程详解
Jun 25 #Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 #Python
python求最大值最小值方法总结
Jun 25 #Python
python安装requests库的实例代码
Jun 25 #Python
You might like
php缓存技术介绍
2006/11/25 PHP
php实现天干地支计算器示例
2014/03/14 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
CSS3 边框效果
2019/11/04 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
成人教育自我鉴定
2013/11/01 职场文书
历史系自荐信范文
2013/12/24 职场文书
申请任职学生会干部自荐书范文
2014/02/13 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年妇女工作总结
2015/05/14 职场文书
道士塔读书笔记
2015/06/30 职场文书
病房管理制度范本
2015/08/06 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server