飞机大战功能实现需要安装pygame

安装方法:

win + R 输入cmd,打开如下窗口:

飞机大战的代码python pycharm飞机大战代码_list

 输入 pip install pygame /pip3 install pygame(根据具体版本而定,现在一般是pip3 install pygame)

飞机大战的代码python pycharm飞机大战代码_背景图片_02

安装完成后可以查看:输入pip list 即可

飞机大战的代码python pycharm飞机大战代码_pycharm_03

我这次编程使用的是pycharm工具,所以在pycharm里也要安装一遍pygame

飞机大战的代码python pycharm飞机大战代码_list_04

在Terminal底下的local窗口执行一遍同样操作即可

安装完可以用pip list 查看是否安装成功 

目前仅实现了飞机的控制作用移动和发射子弹,敌机的随机移动和随机发射子弹

创建新的项目时,先添加五个图片[背景图片,玩家飞机图片,敌机图片,子弹图片,敌机子弹图片]和一段背景音乐到文件中,以方便后续使用

具体实现过程如下:

import pygame #引用第三方模块
 import random
 from pygame.locals import *
 import time
 '''
 实现飞机的显示,并控制飞机的移动
 '''
 class UserPlane(object):
     def __init__(self,screen):
         '''
         初始化函数
         :param screen:主窗体对象
         '''
         #飞机的默认位置
         self.x=150
         self.y=470
         #设置要显示内容的窗口
         self.screen=screen
         #载入飞机图片
         self.imageName='./飞机/user.png'#存放飞机的图片
         self.image=pygame.image.load(self.imageName)
         #用来存放子弹
         self.bulletlist=[]
         pass
     def moveleft(self):
         '''
         左移动
         :return:
         '''
         if self.x>=0:
             self.x-=10
             pass
         pass
     def moveright(self):
         '''
         右移动
         :return:
         '''
         if self.x<=330:
             self.x+=10
             pass
         pass
     def display(self):
         '''
         飞机在屏幕显示
         :return:
         '''
         self.screen.blit(self.image,(self.x,self.y))
         #完善子弹的展示逻辑
         needDellList=[]
         for item in self.bulletlist:
             if item.judge():
                 needDellList.append(item)
                 pass
             pass
         #生成新的子弹列表
         for i in needDellList:
             self.bulletlist.remove(i)
             pass
         for bullet in self.bulletlist:
             bullet.display()#显示子弹位置
             bullet.move()#子弹移动
     def shoot(self):
         #创建一个新的子弹对象
         newbullet=Bullet(self.x,self.y,self.screen)
         self.bulletlist.append(newbullet)
         pass
 class EnemyPlane(object):
     def __init__(self,screen):
         # 设置一个方向
         self.directuion='rignt'
         self.x = 0
         self.y = 0
         # 设置要显示内容的窗口
         self.screen = screen
         # 载入敌机图片
         self.imageName = './敌机/user.png'#存放敌机的图片
         self.image = pygame.image.load(self.imageName)
         self.bulletlist=[]
     def display(self):
         self.screen.blit(self.image,(self.x,self.y))
         # 完善子弹的展示逻辑
         needDellList = []
         for item in self.bulletlist:
             if item.judge():
                 needDellList.append(item)
                 pass
             pass
         # 生成新的子弹列表
         for i in needDellList:
             self.bulletlist.remove(i)
             pass
         for bullet in self.bulletlist:
             bullet.display()  # 显示子弹位置
             bullet.move()  # 子弹移动
         pass
     def shoot(self):
         num=random.randint(0,50000)
         if num==3:
             newbullet = EnemyBullet(self.x, self.y, self.screen)
             self.bulletlist.append(newbullet)
         pass
     def move(self):
         if self.directuion=='right':
             self.x+=0.01
             pass
         elif self.directuion=='left':
             self.x-=0.01
             pass
         if self.x>310:
             self.directuion='left'
             pass
         elif self.x<20:
             self.directuion='right'
             pass
 '''
 控制键盘
 '''
 def key_control(obj):
     '''
     用来实现键盘检测
     :param obj: 控制对象
     :return:
     '''
     eventList=pygame.event.get()
     for event in eventList:
         if event.type==QUIT:
             print('退出')
             exit()
             pass
         elif event.type==KEYDOWN:
             if event.key==K_d or event.key==K_RIGHT:
                     print('right')
                     obj.moveright()#左移
             elif event.key==K_a or event.key==K_LEFT:
                     print('left')
                     obj.moveleft()#右移
             elif event.key==K_SPACE:
                     print('SPACE,发射子弹')
                     obj.shoot()
 '''
 创建子弹类对象
 '''
 class Bullet(object):
     def __init__(self,x,y,screen):
         self.x=x
         self.y=y-20
         self.screen=screen
         self.image=pygame.image.load('./子弹/user.png')#存放子弹的图片
         pass
     def display(self):
         self.screen.blit(self.image,(self.x,self.y))
         pass
     def move(self):
         self.y-=0.05
         pass
     def judge(self):
         '''
         判断是否越界
         :return:
         '''
         if self.y<0:
             return True
         else:
             return False
     pass
 class EnemyBullet(object):
     def __init__(self,x,y,screen):
         self.x=x
         self.y=y+20
         self.screen=screen
         self.image=pygame.image.load('./敌机子弹/user.png')#存放敌机子弹的图片
         pass
     def display(self):
         self.screen.blit(self.image, (self.x, self.y))
         pass
     def move(self):
         self.y+=0.05
     def judge(self):
         '''
         判断是否越界
         :return:
         '''
         if self.y>480:
             return True
         else:
             return False
     pass
 def main():
 # 首先创建一个窗口,用来显示内容
     screen=pygame.display.set_mode((350,500))
 # 设定一个背景图片
     background=pygame.image.load('./飞机/plane.jpg')#选择背景图片
 # 设定一个title
     pygame.display.set_caption('飞机大战')
 # 添加背景音乐
     pygame.mixer.init()
     pygame.mixer.music.load('./飞机/派克特 - Home.mp3')#选择你要添加的BGM
     pygame.mixer.music.set_volume(0.2)
     pygame.mixer.music.play(-1)#循环次数-1,表示无限循环
 # 创建一个飞机对象
     user=UserPlane(screen)
 # 创建一个敌机对象
     enemy=EnemyPlane(screen)
 # 设定要显示的内容
     while True:
         screen.blit(background,(0,0))
 # 显示玩家飞机图片
         user.display()
 # 显示敌机图片
         enemy.display()
         enemy.move()
         enemy.shoot()
 # 获取键盘事件
         key_control(user)
 # 更新显示内容
         pygame.display.update()
         pass
 if __name__=='__main__':
     main()

本次编程的核心是面向对象编程,当然目前代码仍有许多冗余,后续可以进行更多的优化