飞机大战python代码讲解-python飞机大战代码

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞机大战是一款经典的飞行射击游戏,下面是一个简单的 Python 实现: 1. 游戏初始化 ```python import pygame pygame.init() screen = pygame.display.set_mode((480, 700)) pygame.display.set_caption("Plane Game") ``` 2. 加载游戏素材 ```python bg = pygame.image.load("images/background.png") player = pygame.image.load("images/me1.png") ``` 3. 实现游戏循环 ```python while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() screen.blit(bg, (0, 0)) screen.blit(player, (190, 500)) pygame.display.update() ``` 4. 实现玩家移动 ```python keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: player_x -= 5 if keys[pygame.K_RIGHT]: player_x += 5 if keys[pygame.K_UP]: player_y -= 5 if keys[pygame.K_DOWN]: player_y += 5 screen.blit(player, (player_x, player_y)) ``` 5. 实现敌机生成 ```python enemy = pygame.image.load("images/enemy1.png") enemies = [] for i in range(5): enemy_x = random.randint(0, 480 - enemy.get_width()) enemy_y = random.randint(-400, -enemy.get_height()) enemies.append((enemy_x, enemy_y)) for enemy_x, enemy_y in enemies: screen.blit(enemy, (enemy_x, enemy_y)) ``` 6. 实现敌机移动 ```python for i in range(len(enemies)): enemies[i] = (enemies[i], enemies[i] + 3) if enemies[i][1] > 700: enemy_x = random.randint(0, 480 - enemy.get_width()) enemy_y = random.randint(-400, -enemy.get_height()) enemies[i] = (enemy_x, enemy_y) screen.blit(enemy, (enemies[i], enemies[i])) ``` 7. 实现碰撞检测 ```python player_rect = pygame.Rect(player_x, player_y, player.get_width(), player.get_height()) for enemy_x, enemy_y in enemies: enemy_rect = pygame.Rect(enemy_x, enemy_y, enemy.get_width(), enemy.get_height()) if player_rect.colliderect(enemy_rect): print("Game Over") pygame.quit() exit() ``` 以上是一个简单的飞机大战 Python 实现。你可以在此基础上继续完善游戏,比如添加子弹、音效等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值