基于python的飞机大战游戏的设计与实现,用python实现飞机游戏
这篇文章主要为大家详细介绍了大蟒实现简单飞机大战小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
为了熟悉大蟒基础语法,学习了一个经典的案例:飞机大战,最后实现效果如下:
实现步骤:
下载64位对应大蟒版本的py游戏:py游戏-1。9 .6-cp38-cp38-win _ amd64。万海
更新pip:python -m pip安装-升级点
安装皮游戏:皮普安装py游戏-1。9 .6-cp38-cp38-win _ amd64。万海
实现代码如下:
导入系统#导入系统模块
导入随机#随机数模块
导入pygame #导入简介及安装模块
导入pygame.locals #导入简介及安装本地策略
ICO _ PATH= images/APP。ICO # APP _ ICO
APP_NAME=飞机大战1.0版 #应用程序名称
敌人_IMGS=(images/enemy1.png , images/enemy2.png) #敌人_IMGS
# TODO定义一个公共类
班级模型:
窗口=无#主窗体窗户对象
# 初始化函数
def __init__(self,img_path,x,y):
自我。img=py游戏。形象。加载(img _ path)
self.x=x
self.y=y
# 将图片填充到背景中
极好的显示器(自身):
Model.window.blit(self.img,(self.x,self.y))
# TODO背景
类别背景(型号):
# 背景移动
定义移动(自己):
如果self.y=Game .窗口_高度:
self.y=1
else:
self.y=0
# 背景图片展示
极好的显示器(自身):
Model.window.blit(self.img,(self.x,self.y)) #填充背景
Model.window.blit(self.img,(self.x,self.y - Game .WINDOW_HEIGHT)) #填充辅助背景
# TODO玩家类
:类播放器(型号)
def __init__(self,img_path,x,y):
超级()。__init__(img_path,x,y)
# 子弹
self.bullets=[]
极好的显示(己方、敌方):
超级()。显示()
remove_bullets=[]
对于self .子弹中的项目符号3360
bullet.move()
bullet.display()
# 如果子弹小于消失于屏幕,删除子弹
if bullet.y -11:
remove_bullets.append(项目符号)
# 子弹的矩阵
bullet _ rect=py游戏。当地人。rect(项目符号。x,bullet.y,5,11)
# TODO进行碰撞检测
为了敌人中敌人:
# 敌机的矩阵
enemy _ rect=pygame。当地人。rect(敌人。x,enemy.y,57,43)
# 如果碰撞
如果pygame .Rect.colliderect(bullet_rect
, enemy_rect):
# 随机修改敌机的位置模拟敌机销毁并生成新敌机并删除子弹
enemy.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)])
enemy.x = random.randint(0, Game.WINDOW_WIDTH - 57)
enemy.y = random.randint(-Game.WINDOW_WIDTH, -43)
remove_bullets.append(bullet)
break
for bullet in remove_bullets:
self.bullets.remove(bullet)
# TODO 敌机类
class EnemyPlane(Model):
def __init__(self):
self.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)])
self.x = random.randint(0, Game.WINDOW_WIDTH - 57)
self.y = random.randint(-Game.WINDOW_WIDTH, -43)
def move(self):
if self.y > Game.WINDOW_HEIGHT:
self.y = -43 # 返回初始位置
else:
self.y += 1
# TODO 子弹类
class Bullet(Model):
def move(self):
self.y -= 1
# TODO 游戏类
class Game:
WINDOW_WIDTH = 410
WINDOW_HEIGHT = 614
# 初始化操作
def __init__(self):
self.window = pygame.display.set_mode([Game.WINDOW_WIDTH, Game.WINDOW_HEIGHT]) # 窗口的设置
self.background = Background("images/background.png", 0, 0) # 窗体模型的设置
self.player = PlayerPlane("images/me1.png", 180, 400)
self.enemyPlanes = []
for _ in range(5):
self.enemyPlanes.append(EnemyPlane())
# 游戏的入口函数
def run(self):
self.frame_init()
while True:
self.background.move() # 背景向上移动,模拟环境移动
self.background.display() # 将图片塞入到窗体中
self.player.display(self.enemyPlanes)
for enemy in self.enemyPlanes:
enemy.move()
enemy.display()
pygame.display.update() # 刷新窗体
self.event_init() # 监听事件
# 初始化窗口
def frame_init(self):
Model.window = self.window # 将window对象赋值给Model公有类
ico = pygame.image.load(ICO_PATH) # 加载图片
pygame.display.set_icon(ico) # 设置icon
pygame.display.set_caption(APP_NAME) # 设置app_name
# 事件初始化方法
def event_init(self):
for event in pygame.event.get():
# 关闭事件
if event.type == pygame.locals.QUIT:
sys.exit()
# 监听鼠标事件
if event.type == pygame.locals.MOUSEMOTION:
pos = pygame.mouse.get_pos()
self.player.x = pos[0] - 51
self.player.y = pos[1] - 63
focus_state = pygame.mouse.get_pressed()
if focus_state[0] == 1:
pos = pygame.mouse.get_pos()
self.player.bullets.append(Bullet("images/bullet1.png", pos[0], pos[1] - 75))
if __name__ == "__main__":
Game().run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。