zoukankan      html  css  js  c++  java
  • python飞机大战代码

      1 import pygame
      2 from pygame.locals import *
      3 from pygame.sprite import Sprite
      4 import random
      5 import time
      6 pygame.init()#游戏初始化
      7 pygame.mixer.init()#混音器初始化
      8 #游戏背景音乐
      9 pygame.mixer.music.load("./sound/game_music.wav")
     10 pygame.mixer.music.set_volume(0.2)
     11 #子弹发射音乐
     12 bullet_sound = pygame.mixer.Sound("./sound/bullet.wav")
     13 bullet_sound.set_volume(0.2)
     14 #我方飞机挂了的音乐
     15 me_down_sound = pygame.mixer.Sound("./sound/game_over.wav")
     16 me_down_sound.set_volume(0.2)
     17 #敌方飞机挂了的音乐
     18 enemy_down_sound = pygame.mixer.Sound("./sound/enemy1_down.wav")
     19 enemy_down_sound.set_volume(0.2)
     20 
     21 #设置定时器事件
     22 CREAT_ENEMY = pygame.USEREVENT
     23 pygame.time.set_timer(CREAT_ENEMY,1000)
     24 
     25 #创建一个窗口,用来显示内容
     26 screen = pygame.display.set_mode((480,800),0,32)
     27 
     28 class Base(object):
     29     def __init__(self,screen):
     30         self.screen = screen
     31 
     32 class Plan(Base):
     33     def __init__(self,screen):
     34         super().__init__(screen)
     35         
     36         self.image = pygame.image.load(self.imageName).convert()
     37         self.bulletList = []
     38     def display(self):
     39        self. screen.blit(self.image,(self.x,self.y))
     40        for bullet in self.bulletList:
     41            bullet.display()
     42            bullet.move()
     43            if bullet.judge():
     44                self.bulletList.remove(bullet)
     45 class GamePlan(Plan,pygame.sprite.Sprite):
     46     def __init__(self,screen):
     47         self.imageName = "./feiji/hero.gif"
     48         super().__init__(screen)
     49         Sprite.__init__(self)
     50 
     51         self.rect = self.image.get_rect()
     52 
     53         self.rect.x=200
     54         self.rect.y=680
     55         #加载我机损毁图片
     56         self.bomb1 =  pygame.image.load("./feiji/hero_blowup_n1.png")
     57         self.bomb2 = pygame.image.load("./feiji/hero_blowup_n2.png")
     58         self.bomb3 = pygame.image.load("./feiji/hero_blowup_n3.png")
     59         self.bombList = [self.bomb1,self.bomb2,self.bomb3]
     60     def display(self):
     61         self.screen.blit(self.image,(self.rect.x,self.rect.y))
     62         for bullet in self.bulletList:
     63             bullet.display()
     64             bullet.move()
     65     def moveLeft(self):
     66         if self.rect.x >=0:
     67             self.rect.x-=20
     68     def moveRight(self):
     69         if self.rect.x <480-100:
     70             self.rect.x+=20
     71     def moveUp(self):
     72         if self.rect.y>0:
     73             self.rect.y-=20
     74     def moveDown(self):
     75         if self.rect.y<860-124:
     76             self.rect.y+=20
     77     def _del_(self):
     78         print("游戏结束")
     79     def shootbullet(self):
     80        Newbullet =PublicBullet(self.rect.x,self.rect.y,self.screen)
     81        self.bulletList.append(Newbullet)
     82        bullet_sound.play()
     83 class EnemyPlan(Plan,pygame.sprite.Sprite):
     84     def __init__(self,screen):
     85         self.speed = random.randint(1,3)
     86         self.imageName = "./feiji/enemy-1.gif"
     87         super().__init__(screen)
     88         Sprite.__init__(self)
     89         #确定敌机位置
     90         self.rect = self.image.get_rect()
     91         self.reset()
     92         #加载敌机损毁图片
     93         self.bomb1 =  pygame.image.load("./feiji/enemy0_down1.png")
     94         self.bomb2 = pygame.image.load("./feiji/enemy0_down2.png")
     95         self.bomb3 = pygame.image.load("./feiji/enemy0_down3.png")
     96         self.bombList = [self.bomb1,self.bomb2,self.bomb3]
     97     def reset(self):
     98 
     99         self.rect.x = random.randint(0,400)
    100         self.rect.y= 0
    101 
    102     def move(self):
    103         self.rect.y+=self.speed
    104     def update(self):
    105         if self.rect.y>860:
    106             self.kill()
    107     def _del_(self):
    108         print("敌机挂了")
    109 
    110 class PublicBullet(Base):
    111     def __init__(self,x,y,screen):
    112         super().__init__(screen)
    113         self.imageName="./feiji/bullet-3.gif"
    114         self.x = x+40
    115         self.y = y-20
    116         self.image = pygame.image.load(self.imageName).convert()
    117     def move(self):
    118         self.y-=4
    119 
    120     def display(self):
    121         self.screen.blit(self.image,(self.x,self.y))
    122     def judge(self):
    123         if self.y<0 or self.y>860 :
    124             return True
    125         else:
    126             return False
    127 
    128 #设置敌机精灵组
    129 enemy = EnemyPlan(screen)
    130 enemy1 = EnemyPlan(screen)
    131 enemy2 = EnemyPlan(screen)
    132 enemy3 = EnemyPlan(screen)
    133 enemy4 = EnemyPlan(screen)
    134 enemy5 = EnemyPlan(screen)
    135 enemy6 = EnemyPlan(screen)
    136 enemy7= EnemyPlan(screen)
    137 enemy_group = pygame.sprite.Group(enemy,enemy1,enemy2,enemy3,enemy4,enemy5,enemy6,enemy7)
    138 
    139 gamePlan =GamePlan(screen)
    140 def key_control(gamePlan):
    141     for event in pygame.event.get():
    142             #退出按钮
    143          if event.type == QUIT:
    144                 print("exit")
    145                 exit()
    146          elif event.type == CREAT_ENEMY:
    147               enemy = EnemyPlan(screen)
    148               enemy_group.add(enemy)
    149             #按键
    150          elif event.type == KEYDOWN:
    151              if event.key == K_LEFT:
    152                  gamePlan.moveLeft()
    153              elif event.key == K_RIGHT:
    154                  gamePlan.moveRight()
    155              elif event.key == K_UP:
    156                  gamePlan.moveUp()
    157              elif event.key == K_DOWN:
    158                  gamePlan.moveDown()
    159              elif event.key == K_SPACE:
    160                  gamePlan.shootbullet()
    161 def main():
    162     #创建一个窗口,用来显示内容
    163     screen = pygame.display.set_mode((480,800),0,32)
    164     #创建一个和窗口大小的图片,用来充当背景
    165     background = pygame.image.load("./feiji/background.png").convert()
    166     #
    167     clock = pygame.time.Clock()
    168     pygame.mixer.music.play(-1)
    169     enemy_index = 0
    170     plan_index = 0
    171     score = 0
    172     while True:
    173         #设定需要显示的背景图
    174        screen.blit(background,(0,0))
    175        # 刷新帧率
    176        clock.tick(60)
    177        gamePlan.display()
    178 
    179        #让精灵组中所有精灵更新位置
    180        enemy_group.update()
    181        enemy_group.draw(screen)
    182 
    183        for enemy in enemy_group:
    184            enemy.move()
    185            x1 = enemy.rect.x
    186            x2 = enemy.rect.x + 51
    187            y1 = enemy.rect.y
    188            y2 = enemy.rect.y + 39
    189            for bullet in gamePlan.bulletList:
    190                 x = bullet.x
    191                 y = bullet.y
    192                 a = x>x1 and x<x2 and y>y1 and y<y2
    193                 if a:
    194                    screen.blit(enemy.bombList[enemy_index],enemy.rect)
    195                    enemy_index = (enemy_index +1)%3
    196                    time.sleep(0.022)
    197                    if enemy_index == 0:
    198                        enemy_down_sound.play()
    199                        enemy.kill()
    200                        score +=10
    201            c1 = gamePlan.rect.x
    202            c2 = gamePlan.rect.x + 100
    203            d1 = gamePlan.rect.y
    204            b = c1<x2 and c2>x1 and d1<y2 
    205            if b:
    206                screen.blit(enemy.bombList[enemy_index],enemy.rect)
    207                screen.blit(gamePlan.bombList[plan_index],gamePlan.rect)
    208                plan_index = (plan_index +1)%3
    209                time.sleep(0.022)
    210                if plan_index == 0:
    211                     me_down_sound.play()
    212                     says =("Game Over!")
    213                     my_font = pygame.font.SysFont("UbuntuMono-Bold1",84)
    214                     says_suface = my_font.render(says,True,(10,10,10))
    215                     pygame.image.save(says_suface,"hello.png")
    216                     screen.blit(says_suface,(100,300))
    217                     say = ("SCORE:%d"%score)
    218                     my_font = pygame.font.SysFont("UbuntuMono-Bold1",64)
    219                     say_surface = my_font.render(say,True,(0,0,0))
    220                     pygame.image.save(say_surface,"12.png")
    221                     screen.blit(say_surface,(150,400))
    222 
    223        key_control(gamePlan)
    224        pygame.display.update()
    225 if __name__ =="__main__":
    226     
    227     main()
  • 相关阅读:
    Work harder, smarter 工作需要努力和智慧
    且慢下手(转)
    .net 打包中的参数传递
    sql语句编写技巧
    在安装文件中解压sfx压缩文件
    vs.net编程技巧
    統制勘定(reconciliationaccounts)とは
    ExtJs页面布局总结(转载)
    ext自定义form表单参数为JSON格式getJsonValue:(同时提交多个表单时需要用到)
    oracle截取日期函数
  • 原文地址:https://www.cnblogs.com/levelstrcpy/p/8892928.html
Copyright © 2011-2022 走看看