用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中将单词首字母大写的capitalize()方法
May 18 Python
Python实现身份证号码解析
Sep 01 Python
Python出现segfault错误解决方法
Apr 16 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Django实现全文检索的方法(支持中文)
May 14 Python
Django rest framework工具包简单用法示例
Jul 20 Python
Python Celery多队列配置代码实例
Nov 22 Python
python return逻辑判断表达式实现解析
Dec 02 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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
如何做到多笔资料的同步
2006/10/09 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
JavaScript延迟加载
2021/03/09 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
开办加工厂创业计划书
2014/01/03 职场文书
新员工欢迎词
2014/01/12 职场文书
进步之星获奖感言
2014/02/22 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
求职信格式要求
2014/05/23 职场文书
销售岗位职责范本
2014/06/12 职场文书
五年级作文之想象作文
2019/10/30 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
Python 中random 库的详细使用
2021/06/03 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android