用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实现删除Android工程中的冗余字符串
Jan 19 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python3字符串学习教程
Aug 20 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
python实现壁纸批量下载代码实例
Jan 25 Python
python实现数据库跨服务器迁移
Apr 12 Python
Python动态导入模块的方法实例分析
Jun 28 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
利用python绘制数据曲线图的实现
Apr 09 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
python备份文件的脚本
2008/08/11 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
python返回数组的索引实例
2019/11/28 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
pytorch数据预处理错误的解决
2020/02/20 Python
元旦晚会感言
2014/03/12 职场文书
故宫的导游词
2015/01/31 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书