Python-飞机大战游戏

2021/5/12 12:26:48

本文主要是介绍Python-飞机大战游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

#plan pro 需求的描述
# 存在四个对象:我方飞机、敌方飞机、我方子弹、敌方子弹。
#功能:我方飞机可以移动【根据按键来控制】 敌方飞机也可以移动【随机的自动移动】、双方飞机都可以用来发送子弹。
#背景音乐的添加 、 

# 步骤:1、创建一个窗口。2、创建一个我方飞机,根据方向键左右的移动。 3、给我方飞机添加发射子弹的功能【可以按下空格键去发送】 、4创建一个敌人飞机,5敌人飞机可以自由的移动、6敌人飞机可以自动的发射子弹、


import pygame
#import time
import random#随机产生一个数据对象

import time


from pygame.locals import *
'''
创建子弹类
'''
class Bullet(object):
    def __init__(self,x,y,screen):
        self.x=x+13
        self.y=y-23
        self.screen=screen
        self.image=pygame.image.load(r'C:\Users\HP\Desktop\zidan.png')
        #用来存放子弹的列表
      
        pass
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
       
        pass
    
    def move(self):
        self.y-=10
    def judge(self):
        '''
        判断子弹是否越界

        Returns
        -------
        None.

        '''
        if self.y<0:
            return True
        else:
            return False
        
        pass


'''
1、实现飞机的显示,并且可以控制飞机的移动【面向对象】
'''
 #获取键盘事件
def key_control(HerObject):
    
    eventlist=pygame.event.get()
    for event in eventlist:
        if event.type==QUIT:
            print('退出')
            exit()
            pass
        elif event.type==KEYDOWN:
            if event.type==K_a or event.key==K_LEFT:
                print('left')
                HerObject.moveleft()
                pass
             
            elif event.type==K_d or event.key==K_RIGHT:
                print('right')
                HerObject.moveright()
                pass
            elif event.type==K_w or event.key==K_UP:
                print('up')
                HerObject.moveup()
            elif event.type==K_x or event.key==K_DOWN:
                print('down')
                HerObject.movedown()
            elif event.key==K_SPACE:
                print('K_SPACE')
                HerObject.shootBullet()
                
            
            
            pass
        pass
    pass

        
class HeroPlane(object):
    
   
    def __init__(self,screen):
        '''
        主窗体对象

        Parameters
        ----------
        sreen : TYPE
            DESCRIPTION.

        Returns
        -------
        None.

        '''
        #飞机的默认位置
        self.x=150
        self.y=450
        #设置要显示内容的窗口
        self.screen=screen
        #载入飞机的图片
      
        self.image=pygame.image.load('D:\ppt练习\图片素材\卡通小学生的\plane.png')
        self.bulletList=[]
        
        pass
    def moveleft(self):
        '''
        左移动

        Returns
        -------
        None.

        '''
        if self.x>0:
            self.x-=10
        pass
    def moveright(self):
        '''
        右移动

        Returns
        -------
        None.

        '''
        if self.x<250:
            self.x+=10
        pass
    def moveup(self):
        if self.y>100:
            self.y-=10
            pass
    def movedown(self):
        if self.y<500:
           self. y+=10
           pass
       
            
    def display(self):
        '''
        飞机在窗口中的显示

        Returns
        -------
        None.

        '''
        #显示飞机
        self.screen.blit(self.image,(self.x,self.y))
         #完善子弹的展示逻辑
         
        needDelTtemList=[]
        
        for item in self.bulletList:
            if item.judge():
                needDelTtemList.append(item)
                pass
            pass
        
           #重新遍历一次,把它进行删除。(这里有一点看不懂)
        for i in needDelTtemList:
            self.bulletList.remove(i)
            pass
        for bullet in self.bulletList:
            bullet.display() #显示子弹的位置。
            bullet.move() #让这个进行移动,下次再显示后就会看到子弹在修改后的位置。
        pass   
    #发射子弹(这里现在还看不懂)
    def shootBullet(self):
        newBullet=Bullet(self.x,self.y, self.screen)
        self.bulletList.append(newBullet)
        
        
        pass
    


    pass

#创建敌机类
class EnemyPlane:
    
     def __init__(self,screen):
        '''
        主窗体对象

        Parameters
        ----------
        sreen : TYPE
            DESCRIPTION.

        Returns
        -------
        None.

        '''
        #默认设置一个方向
        self.direction='right'
        
        #飞机的默认位置
        self.x=0
        self.y=0
        #设置要显示内容的窗口
        self.screen=screen
        
        self.bulletList=[]
        #载入飞机的图片
      
        self.image=pygame.image.load(r'C:\Users\HP\Desktop\emey.jpg')
        
        pass
    
    #显示敌机以及位置子弹的信息。
     def display(self):
         
        self.screen.blit(self.image,(self.x,self.y))
         #完善子弹的展示逻辑
         
        needDelTtemList=[]
        
        for item in self.bulletList:
            if item.judge():
                needDelTtemList.append(item)
                pass
            pass
        
           #重新遍历一次,把它进行删除。(这里有一点看不懂)
        for i in needDelTtemList:
            self.bulletList.remove(i)
            pass
        for bullet in self.bulletList:
            bullet.display() #显示子弹的位置。
            bullet.move() #让这个进行移动,下次再显示后就会看到子弹在修改后的位置。
        pass   
        pass
     def move(self):
         
         if self.direction=='right':
             self.x+=1
         elif self.direction=='left':
             self.x-=1
             pass
         if self.x>350-20:
             self.direction='left'
             pass
         elif self.x<0:
             self.direction='right'
             pass
         
         
             
         
         pass
     
     def sheBullet(self):
         '''
         敌机随机的发射子弹

         Returns
         -------
         None.

         '''
         num=random.randint(1, 30)
         if num==3:
             newBullet=EnemyBullet(self.x,self. y,self.screen)
             self.bulletList.append(newBullet)
             pass
         pass
     
         
         
      
     
     pass
 
    
#创建敌机的子弹类。
class EnemyBullet(object):
    def __init__(self,x,y,screen):
        self.x=x+13
        self.y=y+10
        self.screen=screen
        self.image=pygame.image.load(r'C:\Users\HP\Desktop\zidan.png')
        #用来存放子弹的列表
      
        pass
     
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
       
        pass
   
    
    
    def move(self):
        self.y+=2
    def judge(self): 
        '''
        判断子弹是否越界

        Returns
        -------
        None.

        '''
        if self.y>500:
            return True
        else:
            return False
        
        pass

    

    
   

def main():
    
# 先创建一个窗口,用来显示内容
   screen=pygame.display.set_mode((500,500))
   background=pygame.image.load(r'C:\Users\HP\Desktop\plane.jpg')
   #设置一个标题
   pygame.display.set_caption('飞机游戏')

#添加背景音乐
   pygame.mixer.init()
   pygame.mixer.music.load(r'C:\Users\HP\Music\I wanna be alive.mp3')
   pygame.mixer.music.set_volume(0.6)
   pygame.mixer.music.play(-1) #-1表示无限的进行循环
   
   
   
   
   #创建一个飞机对象。
   hero=HeroPlane(screen)
   
   #创建一个敌机对象。
   enemyplane=EnemyPlane(screen)
   

   
#居中显示出来
   while True:
       
       screen.blit(background,(0,0))
       #显示玩家飞机的图片
       hero.display()
       #显示敌机,调用方法。
       enemyplane.display()
       #敌机移动
       enemyplane.move()
       #敌机随机发射子弹
       enemyplane.sheBullet()
       key_control(hero)
      
                    
                    
                    
                
                   
            
       #进行更新
       pygame.display.update()
       #time.sleep(0.1)
       pygame.time.Clock().tick(5)
       pass

    
if __name__=='__main__':
    main()

在这里插入图片描述



这篇关于Python-飞机大战游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程