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