简易飞机大战的代码

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

安装方法:

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

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

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

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

在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()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值