通过Python编写飞机大战游戏,面向对象设计思想,相对比较简单,你也可以大胆尝试吧!

1、先看看游戏屏幕样式及工作原理

2、再看看动画工作原理

效果展示:

一、功能简介
游戏中我发飞机在下方,由玩家键盘控制左右移动和发射子弹。上方为敌方飞机,随机发射子弹和移动。暂时没有写飞机被击中的逻辑,这里只是为了课程总结,体验一下面向过程的编程方式。

分析,实现效果可分为一下几步操作

搭建界面、创建界面标题
添加背景音乐
玩家飞机的键盘控制检测
玩家飞机的显示、移动、发射子弹、子弹显示、子弹超出显示范围后删除
敌方飞机的显示、移动、发射子弹、子弹显示、子弹超出显示范围后删除
玩家子弹 和 敌方子弹的贴图、发射方式不同(玩家子弹由键盘控制发射、敌方子弹随机发射)
从上面的分析可看出,玩家 和 敌方的飞机和子弹都有共同之处,这些共同之处可有一个统一的基类实现,子类实现不同之处,子类继承父类。

二、代码

  import pygame    #导入第三方模块
  import random    #加载随机数
  import time      #加载时间函数
  pygame.init()    #初始化pygame ,否则会报错[pygame.error: video system not initialized]
  #抽象一个飞机的基类
  class BasePlan():
  def __init__(self, screen,ImageName,x,y):  # Screen是要显示在哪个窗口
    # 设置要显示内容的窗口
    self.screen = screen
    # 生成飞机图片
    self.image = pygame.image.load(ImageName)
    # 存放子弹的列表
    self.BulletList = []
    # 默认位置
    self.x = x
    self.y = y

    pass
def DisPlay(self):
    self.screen.blit(self.image, (self.x, self.y))  # 显示飞机主体
    #完善子弹的展示逻辑
    NeedDelTtemlist=[]                      #创建要删除的子弹列表
    for item in  self.BulletList:           #遍历子弹列表
        if item.Bullet_Judge():             #判断子弹是否要删除
            NeedDelTtemlist.append(item)    #要删除的子弹对象追加到要删除的列表中
            pass
        item.Bullet_Display()               #显示子弹位置
        item.Bullet_Move()                  #子弹移动
        pass
        for i in NeedDelTtemlist:               #遍历要删除的子弹列表
            self.BulletList.remove(i)           #删除子弹对象
            pass
        # for iB in self.BulletList:              #遍历子弹列表
        #     iB.Bullet_Display()                 #显示子弹位置
        #     iB.Bullet_Move()                    #子弹移动
        pass
    pass
pass
  class BaseBullet():
def __init__(self,screen,ImageName,x,y,who):
    self.x = x
    self.y = y
    self.screen = screen
    self.image = pygame.image.load(ImageName)
    self.BulletType=who     #是谁发射的子弹
    pass
def Bullet_Display(self):
    self.screen.blit(self.image, (self.x, self.y))  # 显示子弹
def Bullet_Move(self):
    if self.BulletType =='Hero':
        self.y -= 1
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值