用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之编写类之四再论继承
Oct 11 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
python看某个模块的版本方法
Oct 16 Python
python交易记录链的实现过程详解
Jul 03 Python
Django分页功能的实现代码详解
Jul 29 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
Python的缺点和劣势分析
Nov 19 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 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上传文件的增强函数
2010/07/21 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
JS location几个方法小姐
2008/07/09 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
某公司.Net方向面试题
2014/04/24 面试题
后勤采购员岗位职责
2013/12/19 职场文书
单位门卫岗位职责
2013/12/20 职场文书
高中运动会广播稿
2014/01/21 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
勾股定理课后反思
2014/04/26 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书