|

楼主 |
发表于 2020-2-8 17:08:46
|
显示全部楼层
本帖最后由 zltzlt 于 2020-2-8 17:14 编辑
- import pygame
- import sys
- import traceback
- import myplane
- import enemy
- import bullet
- pygame.init()
- pygame.mixer.init()
- BLACK=(0,0,0)
- RED=(255,0,0)
- GREEN =(0,255,0)
- size = width,height = 480,700
- screen=pygame.display.set_mode(size)
- ######一定记得要写标题########
- pygame.display.set_caption('飞机大战')
- background=pygame.image.load('images/background.png').convert_alpha()
- # 载入游戏音乐
- pygame.mixer.music.load("sound/game_music.ogg")
- pygame.mixer.music.set_volume(0.2)
- bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
- bullet_sound.set_volume(0.2)
- bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
- bomb_sound.set_volume(0.2)
- supply_sound = pygame.mixer.Sound("sound/supply.wav")
- supply_sound.set_volume(0.2)
- get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
- get_bomb_sound.set_volume(0.2)
- get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
- get_bullet_sound.set_volume(0.2)
- upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
- upgrade_sound.set_volume(0.2)
- enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
- enemy3_fly_sound.set_volume(0.2)
- enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
- enemy1_down_sound.set_volume(0.1)
- enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
- enemy2_down_sound.set_volume(0.2)
- enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
- enemy3_down_sound.set_volume(0.5)
- me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
- me_down_sound.set_volume(0.2)
- def add_smallenemy(group1,group2,num):
- for i in range(num):
- e1=enemy.Smallenemy(size)
- group1.add(e1)
- group2.add(e1)
- def add_midenemy(group1,group2,num):
- for i in range(num):
- e2=enemy.Midenemy(size)
- group1.add(e2)
- group2.add(e2)
- def add_bigenemy(group1,group2,num):
- for i in range(num):
- e3=enemy.Bigenemy(size)
- group1.add(e3)
- group2.add(e3)
- def main():
- #各种初始化
- pygame.mixer.music.play(-1)
- clock= pygame.time.Clock()
-
- #生成我方飞机
- me=myplane.Myplane(size)
- #生成敌机组
- enemys = pygame.sprite.Group()
- #生成小飞机
- smallenemys = pygame.sprite.Group()
- add_smallenemy(enemys,smallenemys,15)
- #生成中飞机
- midenemys = pygame.sprite.Group()
- add_midenemy(enemys,midenemys,6)
- #生成大飞机
- bigenemys = pygame.sprite.Group()
- add_bigenemy(enemys,bigenemys,2)
- #生成子弹
- bullets = []
- bullet_num = 4
- bullet_index=0
- for i in range(bullet_num):
- bullets.append(bullet.Bullet1(me.rect.midtop))
-
-
- #延时
- delay = 100
-
- switch = False
- runing=True
- while runing:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- key_pressed = pygame.key.get_pressed()
- if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:
- me.moveup()
- if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:
- me.movedown()
- if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
- me.moveleft()
- if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
- me.moveright()
- #设定延时 5帧翻转一次
- if delay:
- delay-=1
- else:
- delay=100
- if not (delay%5):
- switch = not switch
- screen.blit(background,(0,0))
- #画子弹_发射子弹
- if not (delay%10):
- bullets[bullet_index].reset(me.rect.midtop)
- bullet_index=(bullet_index+1)%bullet_num
- #画子弹_子弹飞行
- for each in bullets:
- if each.active:
- each.move()
- screen.blit(each.image,each.rect)
- enemy_hit = pygame.sprite.spritecollide(each,enemys,False,\
- pygame.sprite.collide_mask)
- if enemy_hit:
- each.active =False
- for e in enemy_hit:
- if e in midenemys or e in bigenemys:
- e.HP-=1
- if e.HP == 0:
- e.active = False
- else:
- e.active = False
- else:
- each.reset(me.rect.midtop)
-
- #画大飞机
- for each in bigenemys:
- if each.active:
- each.move()
- pygame.draw.line(screen,BLACK,\
- (each.rect.left,each.rect.top-5),\
- (each.rect.right,each.rect.top-5),2)
- bl=each.HP/enemy.Bigenemy.HP
- if bl > 0.2:
- color = GREEN
- else :
- color = RED
- pygame.draw.line(screen,color,\
- (each.rect.left,each.rect.top-5),\
- (each.rect.left+bl*each.rect.width,each.rect.top-5),2)
- if each.rect.bottom == -50:
- enemy3_fly_sound.play(-1)
- if switch:
- screen.blit(each.image1,each.rect)
- else:
- screen.blit(each.image2,each.rect)
- #毁灭
- else:
- if not (delay%3):
- if not (each.index%6):
- enemy3_down_sound.play()
- screen.blit(each.image_downs[each.index],each.rect)
- each.index+=1
- if not (each.index%6):
- each.reset()
- enemy3_fly_sound.stop()
- #画中飞机
- for each in midenemys:
- if each.active:
- each.move()
- screen.blit(each.image,each.rect)
- pygame.draw.line(screen,BLACK,\
- (each.rect.left,each.rect.top-5),\
- (each.rect.right,each.rect.top-5),2)
- bl=each.HP/enemy.Midenemy.HP
- if bl > 0.2:
- color = GREEN
- else :
- color = RED
- pygame.draw.line(screen,color,\
- (each.rect.left,each.rect.top-5),\
- (each.rect.left+bl*each.rect.width,each.rect.top-5),2)
- #毁灭
- else:
- if not (delay%3):
- if not (each.index%4):
- enemy2_down_sound.play()
- screen.blit(each.image_downs[each.index],each.rect)
- each.index+=1
- if not (each.index%4):
- each.reset()
-
- #画小飞机
- for each in smallenemys:
- if each.active:
- each.move()
- screen.blit(each.image,each.rect)
- #毁灭
- else:
- if not (delay%3):
- if not (each.index%4):
- enemy1_down_sound.play()
- screen.blit(each.image_downs[each.index],each.rect)
- each.index+=1
- if not (each.index%4):
- each.reset()
- #检测碰撞
- enemys_down = pygame.sprite.spritecollide(me,enemys,False,pygame.sprite.collide_mask)
- if enemys_down:
- for i in enemys_down:
- i.active = False
- #画自己的飞机
- if me.active:
- if switch:
- screen.blit(me.image1,me.rect)
- else:
- screen.blit(me.image2,me.rect)
- #毁灭
- else:
- if not (delay%3):
- if not (each.index%4):
- me_down_sound.play()
- screen.blit(each.image_downs[each.index],each.rect)
- each.index+=1
- if not (each.index%4):
- each.reset()
-
- pygame.display.flip()
- clock.tick(60)
- if __name__=='__main__':
- try:
- main()
- except SystemExit:
- pass
- except:
- traceback.print_exc()
- pygame.quit()
- input()
复制代码
这是全部的 |
|