用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编写简单的端口扫描器的实例分享
Dec 18 Python
深入理解Python对Json的解析
Feb 14 Python
python非递归全排列实现方法
Apr 10 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
Django实现全文检索的方法(支持中文)
May 14 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
如何使用python写截屏小工具
Sep 29 Python
python定时截屏实现
Nov 02 Python
python - timeit 时间模块
Apr 06 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
Python深度学习之实现卷积神经网络
Jun 05 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标签云的实现代码
2012/10/10 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
JavaScript实现多球运动效果
2020/09/07 Javascript
python类定义的讲解
2013/11/01 Python
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
django基于restframework的CBV封装详解
2019/08/08 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Python如何在DataFrame增加数值
2020/02/14 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
如何基于Python按行合并两个txt
2020/11/03 Python
python实现代码审查自动回复消息
2021/02/01 Python
三好学生演讲稿范文
2014/04/26 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
大学体育课感想
2015/08/10 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫