我们接下来要基于pygame.sprite.Sprite创建自己的类,首先必须是主角的,创建一个己方飞机的类,并且给飞机加上子弹哈!

首先我们还是先分析一下,己方飞机需要有哪些部分构成:

  1. 自身的图片加载,并且要有喷气的特效
  2. 要有上下左右控制的方法
  3. 当被击中了要有击中的效果
  4. 被击中了之后要能够复活(三条命)
class myPlane(pygame.sprite.Sprite):    # 创建己方飞机的类def __init__(self,screen,screen_size):    # 有两个传参,第一个是创建的主屏幕,第二个是屏幕的大小# 因为要绘制飞机和飞行范围的限制pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load('./images/me1.png').convert_alpha()    # 己方飞机的第一张图片self.image2 = pygame.image.load('./images/me2.png').convert_alpha()   # 己方飞机的第二张图片,两张图片就是轮流切换形成动画效果的self.mask = pygame.mask.from_surface(self.image)    # 飞机的轮廓,被撞击或被击中的判断条件self.rect = self.image.get_rect()    # 获取飞机的rect信息self.width,self.height = screen_size[0],screen_size[1]    # 获取屏幕的大小self.rect.left,self.rect.bottom = (self.width-self.rect.width)//2, self.height-10    # 飞机的初始位置self.screen = screen        # 获得绘制的窗体self.speed = 10             # 每次移动的距离self.switch_image = True    # 己方飞机的两张图片的切换标志self.delay = 100            # 两张图片切换的延时时间(相当于运行周期)self.destroy_images = []    # 飞机坠毁的图片序列self.destroy_images.extend([    # 加载坠毁的四张图片,并添加到列表pygame.image.load('./images/me_destroy_1.png').convert_alpha(),pygame.image.load('./images/me_destroy_2.png').convert_alpha(),pygame.image.load('./images/me_destroy_3.png').convert_alpha(),pygame.image.load('./images/me_destroy_4.png').convert_alpha()])self.active = True          # 标注飞机的初始状态def moveUp(self):        # 飞行移动并判断边界if self.rect.top > 0:self.rect.top -= self.speedelse:self.rect.top = 0def moveDown(self):if self.rect.bottom < self.height-10:self.rect.bottom += self.speedelse:self.rect.bottom = self.height-10def moveLeft(self):if self.rect.left > 0:self.rect.left -= self.speedelse:self.rect.left = 0def moveRight(self):if self.rect.right < self.width:self.rect.right += self.speedelse:self.rect.right = self.widthdef animation(self):    # 动画的实现及效果绘制if self.switch_image:self.screen.blit(self.image, self.rect)else:self.screen.blit(self.image2, self.rect)if self.delay % 5 == 0:    # 每隔五个指令周期切换一次self.switch_image = not self.switch_imageself.delay -= 1            # 每次延时时间减一if self.delay == 0:self.delay = 100

上面就是我们创建的己方飞机的类,接下来我们来看下子弹的类需要如何定义:

class Bullet(pygame.sprite.Sprite):def __init__(self,position,direction):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("./images/bullet2.png").convert_alpha()    # 加载子弹的图片self.rect = self.image.get_rect()            # 获取子弹的rect对象self.rect.left, self.rect.top = position     # 设置子弹的初始位置self.speed = 12        # 设置子弹移动的速度self.active = True     # 表示子弹是否超出窗体self.mask = pygame.sprite.from_surface(self.image)    # 获取子弹的轮廓self.direction = direction    # 子弹的方向def move(self):if self.direction:    # 如果子弹的方向是向上的,direction为Trueself.rect.top -= self.speed    # 移动子弹if self.rect.top < 0:          # 判断子弹有没有超出边界self.active = False        # 超出边界及修改标志位else:self.rect.top += self.speedif self.rect.top > 700:self.active = Falsedef reset(self,position):self.rect.left, self.rect.top = position    # 子弹重生self.active = True                          # 修改标志位

现在我们的两个类定义好了,接下来看看主程序应该要怎么写:

import pygame
import sys
from pygame.locals import *
import myclasspygame.init()
screen_size = width, height = 480, 700
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('飞机大战')
bg = pygame.image.load('./images/background.png').convert()pygame.mixer.music.load('./sound/game_music.ogg')
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play(-1)def main():clock = pygame.time.Clock()heroPlane = myclass.myPlane(screen, screen_size)    # 生成己方飞机bullet1 = []        # 生成己方飞机的子弹序列bullet1_index = 0   # 子弹的序号BULLET1_NUM = 5     # 表示五颗子弹连发,刚好超过屏幕for i in range(BULLET1_NUM):    # 序列生成子弹bullet1.append(myclass.Bullet(heroPlane.rect.midtop,True))    # 子弹在飞机的中上方生成,方向向上while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()key_pressed = pygame.key.get_pressed()    # 获取按键信息,这种方式可以使操控更加平滑if key_pressed[K_UP]:        # 如果方向上键按下heroPlane.moveUp()       # 让飞机向上移动if key_pressed[K_DOWN]:heroPlane.moveDown()if key_pressed[K_LEFT]:heroPlane.moveLeft()if key_pressed[K_RIGHT]:heroPlane.moveRight()screen.blit(bg,(0,0))        # 绘制背景图片heroPlane.animation()        # 显示飞机if not (heroPlane.delay % 10):    # 每十个指令周期发射一枚子弹bullet1[bullet1_index].reset(heroPlane.rect.midtop)bullet1_index = (bullet1_index + 1) % BULLET1_NUMfor each in bullet1:    # 绘制子弹each.move()screen.blit(each.image, each.rect)pygame.display.flip()clock.tick(60)if __name__ == '__main__':main()

Pygame飞机大战(四)——创建己方飞机的类,并添加子弹吧相关推荐

  1. python飞机大战联网版_Python 飞机大战搞怪版本

    python 飞机大战搞怪版本 (飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片.由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法) ...

  2. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  3. python飞机大战任务报告_Python飞机大战实战项目案例

    都说实践是检验知识掌握程度的最好测试.随着Python学习者的增长,越来越多的零基础入门课程让人眼花缭乱.虽然说基础理论的学习十分重要,但是如果仅仅只学习理论知识,也是远远不够的.飞机大战的项目实战可 ...

  4. python飞机大战简书_飞机大战(pygame)开发实录一

    飞机大战,算是面向对象的程序语言入门必修程序,但大多教程只是点到为止,跳过了很多实际开发会遇到的问题,自然也错过了很多不错的经验.该系列文章针对python的pygame包,详细讲解了飞机大战的开发. ...

  5. python飞机大战设计思路_python飞机大战pygame游戏背景设计详解

    本文实例讲述了python飞机大战pygame游戏背景设计.分享给大家供大家参考,具体如下: 目标 背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确定 运行 备课代码,观察 背景图像 ...

  6. python飞机大战程序导入_Python飞机大战项目的准备 导入Pygame最全攻略~

    1.导入pygame 首先是导入pygame模块,下面介绍的是pycharm中导入 先建立一个项目 左上角File->Setting->project:飞机大战项目(你自己的文件名字)-& ...

  7. python飞机大战源代码-python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...

  8. python写飞机大战游戏_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  9. android项目飞机大战,Android 项目之飞机大战

    首先,我们要创建一个GameSurface()类:我们此次采用的是画登入界面的方式,所以GameSurface()需要继承SurfaceView类而且要执行SurfaceHolder.Callback ...

最新文章

  1. Redis进阶实践之三如何在Windows系统上安装安装Redis
  2. R语言as.Date函数将字符串转化为日期格式实战
  3. Backtrack5 下WEB模糊测试
  4. java中使用json以及所导入的包
  5. 9.Nexus私服安装配置
  6. 在IOS XR上配置BFD
  7. python 复制文件夹校验_Python多任务复制文件夹
  8. redis系列3---理解内存
  9. A→CALL→B时防止B程序COMMIT掉A程序文件的方法
  10. dubbo指定服务提供者ip_使用指定IP调用Dubbo服务
  11. Power Designer逆向工程连接数据库创建pdm-oracle
  12. 怎么样生成bean对象java_使用BeanFactory实现创建对象
  13. 数据结构排序系列详解之七 归并排序
  14. Web开发之Cookie
  15. Delphi 2010手动安装indy10.5.7
  16. Extjs视频教程_Extjs5.0从入门到实战开发信息管理系统
  17. 常见数据结构面试题(2022年最新版)
  18. 数据挖掘中的关联规则
  19. 一个创业失败案例的复盘
  20. Java编程之图形化设计求任意输入数的阶乘

热门文章

  1. 一篇文章读懂Armv8 AArch64
  2. 【java】剑指offer46_把数字翻译成字符串
  3. 【揭秘】过于真实,培训机构那些不为人知的秘密(一)
  4. POI之图片导出到PPT简单实例
  5. 推荐六个在线生成网址二维码的API接口
  6. 邮件服务器搭建,可连接客户端
  7. Codeforces Round #628 (Div. 2) C. Ehab and Path-etic MEXs
  8. 机器学习(1)——决策树
  9. 2022-2027年中国消防机器人行业市场调研及未来发展趋势预测报告
  10. 图片循环滚动代码(无缝滚动)