用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 23 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
tensorflow更改变量的值实例
Jul 30 Python
python打开windows应用程序的实例
Jun 28 Python
python实现windows倒计时锁屏功能
Jul 30 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
详解Python time库的使用
Oct 10 Python
python中seaborn包常用图形使用详解
Nov 25 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 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木马webshell扫描器代码
2012/01/25 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
js new Date()实例测试
2019/10/31 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python自动扫雷实现方法
2015/07/25 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
遗传算法之Python实现代码
2017/10/10 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
实习协议书
2015/01/27 职场文书
导游词怎么写
2015/02/04 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
银行工作心得体会范文
2016/01/23 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书