用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安装模块的常见问题及解决方法
Feb 05 Python
查看Django和flask版本的方法
May 14 Python
浅析python中的迭代与迭代对象
Oct 08 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
详解Python装饰器
Mar 25 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python用for循环求和的方法总结
Jul 08 Python
python 生成器和迭代器的原理解析
Oct 12 Python
python3实现单目标粒子群算法
Nov 14 Python
关于python中的xpath解析定位
Mar 06 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
Python中全局变量和局部变量的理解与区别
Feb 07 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实现下载断点续传的方法
2014/11/12 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python写的一个简单DNS服务器实例
2014/06/04 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
jupyter实现重新加载模块
2020/04/16 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
本科应届生自荐信
2014/06/29 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
优秀校长事迹材料
2014/12/24 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL