itspython飞机⼤战实训报告200_⽤Python写⼀个经典飞机⼤战
当年微信 5.0 发布时,⾸页被设置成了⼀款新推出的⼩游戏,它就是微信版飞机⼤战,游戏⼀经推出便是⽕爆异常,铅笔画风格的游戏界⾯也受到了很多⼈的喜欢。
最近重温了⼀下这款⼩游戏,尽管时隔多年,但⽆论是游戏的画质还是风格,时⾄今⽇依然都不过时。本⽂我们使⽤ Python 来实现⼀下这款⼩游戏,游戏的实现主要⽤到第三⽅模块 pygame,安装使⽤ pip install pygame 即可。
环境
操作系统:Windows
Python 版本:3.6
涉及模块:pygame、sys、random
实现
飞机⼤战的构成相对⽐较简单,主要包括:主界⾯、玩家、敌⼈、⼦弹、计分板等,下⾯来看⼀下具体实现。
⾸先我们来绘制⼀个主界⾯,主要实现代码如下所⽰:
# 设置屏幕的宽度
SCREEN_WIDTH = 450
# 设置屏幕的⾼度石家庄会计学校
SCREEN_HEIGHT = 600
# 初始化窗⼝
pygame.init()
# 设置窗⼝标题
pygame.display.t_caption("飞机⼤战")
# 设置屏幕⼤⼩
screen = pygame.display.t_mode((SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32)
# 隐藏光标
厚爱什么意思
# 设置背景
bequest
bg = pygame.image.load("resources/image/bg.png")
# 绘制屏幕
screen.fill(0)
# 加⼊背景图⽚
screen.blit(bg, (0, 0))
# 设置游戏结束的图⽚
bg_game_over = pygame.image.load("resources/image/bg_game_over.png")
# 加载飞机资源图⽚
img_plane = pygame.image.load("resources/image/shoot.png")
img_start = pygame.image.load("resources/image/start.png")
img_pau = pygame.image.load("resources/image/pau.png")
img_icon = pygame.image.load("resources/image/plane.png").convert_alpha() # 顺便设置窗⼝
pygame.display.t_icon(img_icon)
# 初始化位置
player_pos = [200, 450]
看⼀下效果:
接着,我们再来定义玩家的属性和⽅法,
主要实现代码如下所⽰:
class Player(pygame.sprite.Sprite):
def __init__(lf, img, rect, pos):
pygame.sprite.Sprite.__init__(lf)
lf.image = []
# 将飞机图⽚部分分隔
for i in range(len(rect)):
lf.image.append(img.subsurface(rect[i]).convert_alpha())
# 获取飞机的区域
< = rect[0]
lf.speed = 8
# ⽣成精灵组实例
lf.bullets = pygame.sprite.Group()
lf.img_index = 0
# 判断飞机是否被打中
lf.is_hit = Fal
def shoot(lf, img):
bullet = Bullet(img, lf.rect.midtop) # 添加⼦弹实例到玩家的⼦弹组
lf.bullets.add(bullet)
def moveUp(lf):
# 当遇到顶部时,设置上顶部为0
op <= 0:
el:
def moveDown(lf):
# 当遇到底部时,设置⼀直为常值
op >= SCREEN_HEIGHT - lf.rect.height:
el:
目不瞑
def moveLeft(lf):
# 当遇到左边时,⼀直停靠在左边
left <= 0:
gestetnerel:
def moveRight(lf):
# 当遇到右边时, 停靠右边
left >= SCREEN_WIDTH - lf.rect.width:
el:
看⼀下玩家的飞机样式:
我们再接着定义⼦弹的属性和⽅法,主要实现代码如下所⽰:class Bullet(pygame.sprite.Sprite):
口语宝def __init__(lf, img, pos):
pygame.sprite.Sprite.__init__(lf)
lf.image = img
# 设置图⽚的区域
< = _rect()
中国专家翻译网lf.rect.midbottom = pos
美式英语翻译lf.speed = 10
def move(lf):
看⼀下⼦弹的样式:
定义完玩家,我们再来定义敌机的属性和⽅法,主要实现代码如下所⽰:
class Enemy(pygame.sprite.Sprite):
def __init__(lf, img, explosion_img, pos):
pygame.sprite.Sprite.__init__(lf)
lf.image = img
< = _rect()
lf.speed = 2
# 设置击毁序列
def move(lf):
# 敌⼈的⼦弹只能⼀直向下
a brief description最后,我们来定义⼀下游戏运⾏的相应逻辑,⽐如:击中敌机、玩家与敌机碰撞、⽣成分数等,主要实现代码如下所⽰:# 控制⼦弹的显⽰运⾏
for bullet in player.bullets: