飞机大战

作者: IT大牛辉 | 来源:发表于2018-05-13 20:47 被阅读91次

安装pygame

1,首先安装pygame

sudo pip3 install pygame

2,验证是否安装pygame

python3 -m pygame.examples.aliens

如果安装上那就完成下列步骤,完成飞机大战项目:

项目准备

一. 使用 pygame 创建图形窗口
二. 理解 图像 并实现图像绘制
三 理解 游戏循环 和 游戏时钟
四. 理解 精灵 和 精灵组

一,创建图形窗口
1.游戏的初始化和退出
切记

    * 要使用 pygame 提供的所有功能之前,需要调用 init 方法
    * 在游戏结束前需要调用一下 quit 方法

import pygame

导入并初始化所有 pygame 模块,使用其他模块之前,必须先调用 init 方法

pygame.init()

游戏代码...

卸载所有 pygame 模块,在游戏结束之前调用!

pygame.quit()
2.游戏中的坐标系

* 坐标系

    * 原点 在 左上角 (0, 0)
    * x 轴 水平方向向 右,逐渐增加
    * y 轴 垂直方向向 下,逐渐增加
 SCREEN_RECT = pygame.Rect(0, 0, 480,600)
依次是英雄的x,y轴,宽度和长度 

3.创建游戏主窗口
pygame 专门提供了一个 模块 pygame.display 用于创建、管理 游戏窗口

)初始化游戏显示窗口

pygame.display.set_mode()

刷新屏幕内容显示,稍后使用

pygame.display.update()

基础类的构建

导弹类

  • 1.导弹是从飞机上发射的(无论是玩家的飞机还是敌机),导弹的位置需要根据飞机的位置确定,还需要根据是玩家飞机还是敌机确定导弹的图片名和发射方向,因此需要传入图片名和位置参数。


    这里写图片描述

    pygame框架加载图片为图像函数为:

    pygame.image.load(image).convert()
    

    传入的参数是图片的相对路径

  • 2.描绘出导弹的位置,导弹并且需要在初始化的self.xself.y基础上移动位置,位置是在屏幕上描绘的,需要传入屏幕参数。

    这里写图片描述

    pygame显示图片函数为:

    screen.blit(self.image,(self.x,self.y))
    pygame.display.update()
    

    第一个参数为加载的图像,第二个参数为左上角坐标。两个函数是配合使用的,需要第二个函数去刷新界面。

飞机类

  • 1.Plane类是接下来要创建的玩家类Hero和敌机类Enemy的基类。基类把两者共同的属性和方法定义出来,方便子类继承。飞机要发射导弹,有一定的发射间隔,因此定义一个对象属性self.bulletSleepTime。还需要一个列表存储导弹,定义一个对象属性为空列表self.bulletList

    这里写图片描述

    time.time()可以用来确定当前时间,按照一定的格式可以转换

  • 2.在初始化的时候我们定义了导弹的发射间隔时间,大于间隔时间的话我们就往定义的列表中添加导弹对象,因为我现在只想让玩家飞机发射子弹,因此初始化导弹对象特意往self.x加了36(是玩家飞机72x72图片宽度的一半),让导弹在玩家飞机的正中间开始显示。

    这里写图片描述
  • 3.描绘出飞机的位置


    这里写图片描述

继承类的构建

玩家飞机类

  • 1.在飞机基类中我们定义了一些共同的对象属性,不同的对象属性有图像和原始位置,而且玩家飞机类对象还想拥有基类对象的属性,所以需要调用Plane.__init__(self)函数,通过这个函数就拥有了Plane基类的对象属性bulletSleepTimelastShootTimebulletList

    这里写图片描述
  • 2.玩家飞机通过键盘的上下左右控制飞机的位置


    这里写图片描述

敌人飞机类

1.jpg
  • 1.敌人飞机类中还多了速度对象属性,考虑到随着游戏难度的增加,敌人飞机速度越来越快,这个参数需要外界传入。而且敌人飞机有小中大三种类型,是随机的,起始的位置x轴也是随机的,y轴固定从最上方开始。

    这里写图片描述

    用到了随机数函数,需要导入random模块

    random.randint(1,3)
    

    其中用到了super(Enemy,self).__init__()与玩家类中的Plane.__init__(self)效果是相同的。direction对象属性可以忽略,现在没有用到。

  • 2.敌人的飞机不断往下掉,改变self.y,其实不用判断,direction没有用到

    这里写图片描述

游戏初始化类(封装功能)

  • 1.GameInit类创建了几个类属性,g_enemyList=[]列表用于存储敌人飞机对象,初始化玩家对象hero=objectobject是元类,和用于统计玩家分数的属性score

    这里写图片描述
  • 2.接下来定义了几个类方法和静态方法,用于封装功能,在主函数里调用的都是这些类方法和静态方法

    • 往敌机列表中添加敌机对象,忽略下我的代码英语好像打错了


      这里写图片描述
    • 创建玩家飞机对象


      这里写图片描述
    • 游戏初始化


      这里写图片描述
    • 玩家飞机对象处理键盘操作,在玩家飞机类中已经定义了键盘处理函数,这里再封装一层


      这里写图片描述
    • 更新敌人飞机位置,敌人飞机对象都在g_enemyList列表中

      这里写图片描述
    • 有3种类型的对象需要描绘,玩家飞机对象,敌人飞机对象和导弹,这个函数就是用来描绘这些对象,其中导弹和敌机需要判断哪些对象超出屏幕从列表中删除,这里用了del函数,记录下索引值并从列表中删除,同样也可以用pop函数,这里的j为索引值

      这里写图片描述
    • 玩家飞机对象发射子弹,同时也要判断打中了敌机就让敌机对象和和子弹对象同时从列表中删除。通过pygame.Rect(self.image.get_rect())获得矩形的值,但是只获得了图像的widthheight两个属性,前两个属性lefttop都为0,因此还需要设置这两个属性,然后通过collidetect判断两个矩形是否有相交处,其中索引值enemyIndexbulletIndex需要仔细分析下

      这里写图片描述
    • 判断玩家飞机是否与敌机相撞判断游戏是否结束


      这里写图片描述
  • 3.几个静态方法,静态方法不需要cls这个参数,通过类和实例都可以调用

    • 退出整个程序


      这里写图片描述
    • 进入游戏后可以按space键停止游戏,其实就是就是个死循坏,按键按下后跳出函数

      这里写图片描述
    • 游戏开始后和结束后把分数显示出来,第一个参数是分数,第二个参数是通过pygame的字体库创建出来的,例如font = pygame.font.SysFont(None,64),参数分别为字体样式和大小,可以选择字体样式例如arialsimsun(宋体),第三个参数是屏幕,第四和第五个参数是字体显示的lefttop值。

      这里写图片描述

1,首先安装pygame
sudo pip3 install pygame
2,验证是否安装pygame
python3 -m pygame.examples.aliens
如果安装上那就完成下列步骤,完成飞机大战项目:
项目准备
一. 使用 pygame 创建图形窗口
二. 理解 图像 并实现图像绘制
三 理解 游戏循环 和 游戏时钟
四. 理解 精灵 和 精灵组
一,创建图形窗口
1.游戏的初始化和退出
切记
* 要使用 pygame 提供的所有功能之前,需要调用 init 方法
* 在游戏结束前需要调用一下 quit 方法

import pygame

导入并初始化所有 pygame 模块,使用其他模块之前,必须先调用 init 方法

pygame.init()

游戏代码...

卸载所有 pygame 模块,在游戏结束之前调用!

pygame.quit()
2.游戏中的坐标系

  • 坐标系

    • 原点 在 左上角 (0, 0)
    • x 轴 水平方向向 右,逐渐增加
    • y 轴 垂直方向向 下,逐渐增加

SCREEN_RECT = pygame.Rect(0, 0, 480,600)
依次是英雄的x,y轴,宽度和长度
3.创建游戏主窗口
pygame 专门提供了一个 模块 pygame.display 用于创建、管理 游戏窗口

)初始化游戏显示窗口

pygame.display.set_mode()

刷新屏幕内容显示,稍后使用

pygame.display.update()

主函数

  • 1.运行一个模块,有if __name__ == 'main':标识,会直接运行里面的代码。第一步初始化pygame库,调用pygame.init(),第二步创建一个窗口与背景图片一样大:screen = pygame.display.set_mode((ScreenWidth,ScreenHeight),0,32),然后可以设置窗口标题:pygame.display.set_caption('飞机大战'),第三步做一些初始化常量设置。其中纪录了游戏开始的时间,因为按照我的思想游戏开始后难度会逐渐增加,我是通过时间来增加难度的

    这里写图片描述

    启动时显示start图片,直到Enter键按下才进入游戏

  • 2.进入while 循坏后,调用游戏初始化类封装好的函数,通过时间间隔interval选定游戏困难模式,通过改变敌机刷新的时间和敌机的速度增加难度,游戏结束后,再次按下Enter 按键退出程序。这里存在一个bug,一旦游戏进行过程中按下Space暂停游戏,interval时间间隔仍然再计算(按道理应该让时间暂停),再次按下Space恢复游戏后,当前模式设定时间减少了或者进入更困难模式了。

    这里写图片描述
1.jpg

相关文章

  • Python打飞机(飞机大战)

    敌机和主机 发子弹 连发子弹 飞机大战(加音乐代码) 飞机大战代码: 精灵组 飞机大战敌机 飞机大战背景 上下左右...

  • 飞机大战

    飞机大战 导入模块的三种方式 import pygamefrom 模块名 import *(代表所有)from 模...

  • 飞机大战

    import pygame import time pygame.init() #1. 创建窗口 screen =...

  • 飞机大战

    这次呢,让我们重温一下儿时的乐趣,用Python做一个飞机大战的小游戏。接下来,让我们一起走进“飞机大战”。一.确...

  • 飞机大战

    飞机大战 导入模块的三种方式 import pygamefrom 模块名 import *(代表所有)from 模...

  • 飞机大战

    一款世界大战空战主题怀旧版经典飞机大战! 还记得小时候街机电玩城的打飞机游戏吗? 不久的未来,大量的外星飞船突袭地...

  • 飞机大战

  • 飞机大战

    首先:安装pygame其次:需要一个编辑器本人使用的是sublime编辑器 安装pygame: 验证安装: 定时器...

  • 飞机大战

    安装pygame 1,首先安装pygame 2,验证是否安装pygame 如果安装上那就完成下列步骤,完成飞机大战...

  • 飞机大战

    首先要下载pygame 代码类 (1)游戏初始化 (2)创建英雄 (3)创建游戏窗口 (4)创建图像 (6)调用u...

网友评论

    本文标题:飞机大战

    本文链接:https://www.haomeiwen.com/subject/nhqrdftx.html