1 importpygame2 from pygame.locals import *
3 from pygame.sprite importSprite4 importrandom5 importtime6 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.USEREVENT23 pygame.time.set_timer(CREAT_ENEMY,1000)24
25 #创建一个窗口,用来显示内容
26 screen = pygame.display.set_mode((480,800),0,32)27
28 classBase(object):29 def __init__(self,screen):30 self.screen =screen31
32 classPlan(Base):33 def __init__(self,screen):34 super().__init__(screen)35
36 self.image =pygame.image.load(self.imageName).convert()37 self.bulletList =[]38 defdisplay(self):39 self. screen.blit(self.image,(self.x,self.y))40 for bullet inself.bulletList:41 bullet.display()42 bullet.move()43 ifbullet.judge():44 self.bulletList.remove(bullet)45 classGamePlan(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 defdisplay(self):61 self.screen.blit(self.image,(self.rect.x,self.rect.y))62 for bullet inself.bulletList:63 bullet.display()64 bullet.move()65 defmoveLeft(self):66 if self.rect.x >=0:67 self.rect.x-=20
68 defmoveRight(self):69 if self.rect.x <480-100:70 self.rect.x+=20
71 defmoveUp(self):72 if self.rect.y>0:73 self.rect.y-=20
74 defmoveDown(self):75 if self.rect.y<860-124:76 self.rect.y+=20
77 def_del_(self):78 print("游戏结束")79 defshootbullet(self):80 Newbullet =PublicBullet(self.rect.x,self.rect.y,self.screen)81 self.bulletList.append(Newbullet)82 bullet_sound.play()83 classEnemyPlan(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 defreset(self):98
99 self.rect.x = random.randint(0,400)100 self.rect.y=0101
102 defmove(self):103 self.rect.y+=self.speed104 defupdate(self):105 if self.rect.y>860:106 self.kill()107 def_del_(self):108 print("敌机挂了")109
110 classPublicBullet(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 defmove(self):118 self.y-=4
119
120 defdisplay(self):121 self.screen.blit(self.image,(self.x,self.y))122 defjudge(self):123 if self.y<0 or self.y>860:124 returnTrue125 else:126 returnFalse127
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 defkey_control(gamePlan):141 for event inpygame.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 defmain():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 =0170 plan_index =0171 score =0172 whileTrue: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 inenemy_group:184 enemy.move()185 x1 =enemy.rect.x186 x2 = enemy.rect.x + 51
187 y1 =enemy.rect.y188 y2 = enemy.rect.y + 39
189 for bullet ingamePlan.bulletList:190 x =bullet.x191 y =bullet.y192 a = x>x1 and xy1 and y
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.x202 c2 = gamePlan.rect.x + 100
203 d1 =gamePlan.rect.y204 b = c1x1 and d1
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()