鱼C论坛

 找回密码
 立即注册
查看: 162|回复: 5

飞机大战如何飞机一次发射5发并排子弹

[复制链接]
发表于 2024-3-24 14:12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
飞机大战如何飞机一次发射5发并排子弹,如何修改代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-24 14:12:36 | 显示全部楼层
要实现飞机一次发射5发并排的子弹,可以对子弹的位置进行适当的偏移。以下是一个简单的示例代码:

  1. import pygame
  2. from pygame.locals import *


  3. def main():
  4.     # 初始化
  5.     pygame.init()

  6.     # 设置窗口大小和标题
  7.     screen_width, screen_height = 480, 600
  8.     screen = pygame.display.set_mode((screen_width, screen_height))
  9.     pygame.display.set_caption("飞机大战")

  10.     # 加载飞机图片
  11.     plane_img = pygame.image.load("plane.png")
  12.     plane_rect = plane_img.get_rect()
  13.     plane_rect.topleft = (screen_width // 2 - plane_rect.width // 2, screen_height - plane_rect.height)

  14.     # 加载子弹图片
  15.     bullet_img = pygame.image.load("bullet.png")
  16.     bullet_rect = bullet_img.get_rect()

  17.     # 定义子弹列表
  18.     bullets = []

  19.     while True:
  20.         # 绘制背景
  21.         screen.fill((255, 255, 255))

  22.         for event in pygame.event.get():
  23.             if event.type == QUIT:
  24.                 pygame.quit()
  25.                 exit()

  26.             # 按下空格键发射子弹
  27.             if event.type == KEYDOWN and event.key == K_SPACE:
  28.                 # 创建5颗子弹,并设置初始位置
  29.                 for i in range(5):
  30.                     bullet = {'rect': bullet_rect.copy(),
  31.                               'x': plane_rect.centerx - bullet_rect.width // 2 + (i - 2) * 20,
  32.                               'y': plane_rect.top - bullet_rect.height}
  33.                     bullets.append(bullet)

  34.         # 移动子弹
  35.         for bullet in bullets:
  36.             bullet['y'] -= 5

  37.         # 绘制飞机和子弹
  38.         screen.blit(plane_img, plane_rect)
  39.         for bullet in bullets:
  40.             screen.blit(bullet_img, (bullet['x'], bullet['y']))

  41.         # 移除超出屏幕的子弹
  42.         bullets = [bullet for bullet in bullets if bullet['y'] > -bullet_rect.height]

  43.         # 更新屏幕显示
  44.         pygame.display.update()


  45. if __name__ == '__main__':
  46.     main()
复制代码


在上述代码中,我们通过`for`循环创建了5颗子弹,并根据飞机的位置和子弹宽度进行了适当的偏移,将子弹添加到了`bullets`列表中。然后,我们使用`for`循环遍历并移动子弹,绘制飞机和子弹,并删除超出屏幕的子弹。最后,更新屏幕显示。

请注意,以上代码只是一个简单的示例,您可以根据自己的需求进行修改和扩展。例如,可以为子弹添加碰撞检测、设置不同的速度等。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-24 14:21:10 | 显示全部楼层

需要修改哪一个呢

FishC 发表于 2024-3-24 14:12
要实现飞机一次发射5发并排的子弹,可以对子弹的位置进行适当的偏移。以下是一个简单的示例代码:

  1. import pygame
  2. import sys
  3. import traceback
  4. from pygame.locals import *
  5. from random import *

  6. import myplane
  7. import enemy
  8. import bullet
  9. import supply


  10. pygame.init()
  11. pygame.mixer.init()

  12. bg_size=width,height=480,700
  13. screen=pygame.display.set_mode(bg_size)
  14. pygame.display.set_caption('飞机大战—FishC Demo')

  15. background=pygame.image.load('images/background.png')


  16. BLACK=(0,0,0)
  17. GREEN=(0,255,0)
  18. RED=(255,0,0)
  19. WHITE=(255,255,255)


  20. #载入游戏音乐
  21. pygame.mixer.music.load("sound/game_music.ogg")
  22. pygame.mixer.music.set_volume(0.2)
  23. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  24. bullet_sound.set_volume(0.2)
  25. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  26. bomb_sound.set_volume(0.2)
  27. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  28. supply_sound.set_volume(0.2)
  29. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  30. get_bomb_sound.set_volume(0.2)
  31. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  32. get_bullet_sound.set_volume(0.2)
  33. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  34. upgrade_sound.set_volume(0.2)
  35. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  36. enemy3_fly_sound.set_volume(0.2)
  37. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  38. enemy1_down_sound.set_volume(0.2)
  39. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  40. enemy2_down_sound.set_volume(0.2)
  41. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  42. enemy3_down_sound.set_volume(0.5)
  43. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  44. me_down_sound.set_volume(0.2)

  45. def add_small_enemies(group1,group2,num):
  46.     for i in range(num):
  47.         e1=enemy.SmallEnemy(bg_size)
  48.         group1.add(e1)
  49.         group2.add(e1)

  50. def add_mid_enemies(group1,group2,num):
  51.     for i in range(num):
  52.         e1=enemy.MidEnemy(bg_size)
  53.         group1.add(e1)
  54.         group2.add(e1)

  55. def add_big_enemies(group1,group2,num):
  56.     for i in range(num):
  57.         e1=enemy.BigEnemy(bg_size)
  58.         group1.add(e1)
  59.         group2.add(e1)

  60. def inc_speed(target,inc):
  61.     for each in target:
  62.         each.speed += inc

  63. def main():
  64.     pygame.mixer.music.play(-1)

  65.     #生成我方飞机
  66.     me=myplane.MyPlane(bg_size)

  67.     enemies=pygame.sprite.Group()

  68.     #生成敌方小型飞机
  69.     small_enemies=pygame.sprite.Group()
  70.     add_small_enemies(small_enemies,enemies,15)

  71.     #生成敌方中型飞机
  72.     mid_enemies=pygame.sprite.Group()
  73.     add_mid_enemies(mid_enemies,enemies,4)

  74.     #生成敌方大型飞机
  75.     big_enemies=pygame.sprite.Group()
  76.     add_big_enemies(big_enemies,enemies,4)

  77.     #生成普通子弹
  78.     bullet1=[]
  79.     bullet1_index=0
  80.     BULLET1_NUM=8
  81.     for i in range(BULLET1_NUM//4):
  82.         #bullet1.append(bullet.Bullet1(me.rect.midtop))
  83.         bullet1.append(bullet.Bullet1((me.rect.centerx-33,me.rect.centery)))
  84.         bullet1.append(bullet.Bullet1((me.rect.centerx-13,me.rect.centery)))
  85.         bullet1.append(bullet.Bullet1((me.rect.centerx+13,me.rect.centery)))
  86.         bullet1.append(bullet.Bullet1((me.rect.centerx+30,me.rect.centery)))
  87.    

  88.     #生成超级子弹
  89.     bullet2=[]
  90.     bullet2_index=0
  91.     BULLET2_NUM=8
  92.     for i in range(BULLET2_NUM//2):
  93.         bullet2.append(bullet.Bullet2((me.rect.centerx-33,me.rect.centery)))
  94.         bullet2.append(bullet.Bullet2((me.rect.centerx+30,me.rect.centery)))
  95.     clock=pygame.time.Clock()

  96.     #中弹图片索引
  97.     e1_destroy_index=0
  98.     e2_destroy_index=0
  99.     e3_destroy_index=0
  100.     me_destroy_index=0
  101.    
  102.     #设置难度级别
  103.     level=1

  104.     #全屏炸弹
  105.     bomb_image=pygame.image.load('images/bomb.png').convert_alpha()
  106.     bomb_rect=bomb_image.get_rect()
  107.     bomb_font=pygame.font.Font('font/font.ttf',48)
  108.     bomb_num=10

  109.     #每30秒发放一个补给包
  110.     bullet_supply=supply.Bullet_Supply(bg_size)
  111.     bomb_supply=supply.Bomb_Supply(bg_size)
  112.     SUPPLY_TIME=USEREVENT
  113.     pygame.time.set_timer(SUPPLY_TIME,10*1000)


  114.     #超级子弹定时器
  115.     DOUBLE_BULLET_TIME=USEREVENT+1

  116.     #标志是否使用超级子弹
  117.     is_double_bullet=False


  118.     #解除我方无敌定时器
  119.     INVINCIBLE_TIME=USEREVENT+2

  120.     #生命数量
  121.     life_image=pygame.image.load('images/life.png').convert_alpha()
  122.     life_rect=life_image.get_rect()
  123.     life_num=6

  124.     #游戏结束界面
  125.     gameover_font=pygame.font.Font('font/font.ttf',48)
  126.     again_image=pygame.image.load('images/again.png').convert_alpha()
  127.     again_rect=again_image.get_rect()
  128.     gameover_image=pygame.image.load('images/gameover.png').convert_alpha()
  129.     gameover_rect=gameover_image.get_rect()

  130.     #用于阻值重复打开文件
  131.     recorded=False


  132.     #用于切换飞机移动图片
  133.     switch_image=True

  134.     #统计得分
  135.     score=0
  136.     score_font=pygame.font.Font('font/font.ttf',36)

  137.     #标志是否暂停游戏
  138.     paused=False
  139.     pause_nor_image=pygame.image.load('images/pause_nor.png').convert_alpha()
  140.     pause_pressed_image=pygame.image.load('images/pause_pressed.png').convert_alpha()
  141.     resume_nor_image=pygame.image.load('images/resume_nor.png').convert_alpha()
  142.     resume_pressed_image=pygame.image.load('images/resume_pressed.png').convert_alpha()
  143.     paused_rect=pause_nor_image.get_rect()
  144.     paused_rect.right,paused_rect.top=width-10,10
  145.     paused_image=pause_nor_image

  146.    
  147.     running=True

  148.     #用于延时
  149.     delay=100
  150.    
  151.     while running:
  152.         for event in pygame.event.get():
  153.             if event.type==QUIT:
  154.                 pygame.quit()
  155.                 sys.exit()
  156.             elif event.type==MOUSEBUTTONDOWN:
  157.                 if event.button==1 and paused_rect.collidepoint(event.pos):
  158.                     paused= not paused
  159.                     if paused:
  160.                         pygame.time.set_timer(SUPPLY_TIME,0)
  161.                         pygame.mixer.music.pause()
  162.                         pygame.mixer.pause()
  163.                     else:
  164.                         pygame.time.set_timer(SUPPLY_TIME,30*1000)
  165.                         pygame.mixer.music.unpause()
  166.                         pygame.mixer.unpause()                        
  167.                         
  168.             elif event.type==MOUSEMOTION:
  169.                 if paused_rect.collidepoint(event.pos):
  170.                     if paused:
  171.                         paused_image=resume_pressed_image
  172.                     else:
  173.                         paused_image=pause_pressed_image
  174.                 else:
  175.                     if paused:
  176.                         paused_image=resume_nor_image
  177.                     else:
  178.                         paused_image=pause_nor_image
  179.             elif event.type==KEYDOWN:
  180.                 if event.key==K_SPACE:
  181.                     if bomb_num:
  182.                         bomb_num-=1
  183.                         bomb_sound.play()
  184.                         for each in enemies:
  185.                             if each.rect.bottom>0:
  186.                                 each.active=False
  187.             elif event.type==SUPPLY_TIME:
  188.                 supply_sound.play()
  189.                 if choice([True,False]):
  190.                     bomb_supply.reset()
  191.                 else:
  192.                     bullet_supply.reset()

  193.             elif event.type==DOUBLE_BULLET_TIME:
  194.                 is_double_bullet=False
  195.                 pygame.time.set_timer(DOUBLE_BULLET_TIME,0)

  196.             elif event.type==INVINCIBLE_TIME:
  197.                 me.invincible=False
  198.                 pygame.time.set_timer(INVINCIBLE_TIME,0)
  199.             
  200.         #根据用户的得分增加难度
  201.         if level==1 and score>50000:
  202.             level=2
  203.             upgrade_sound.play()
  204.             #增加3架小飞机,2架中敌机,1架大敌机
  205.             add_small_enemies(small_enemies,enemies,3)
  206.             add_mid_enemies(mid_enemies,enemies,2)
  207.             add_big_enemies(big_enemies,enemies,1)

  208.             #提升小飞机速度
  209.             inc_speed(small_enemies,1)
  210.         elif level==2 and score>300000:
  211.             level=3
  212.             upgrade_sound.play()
  213.             #增加5架小飞机,3架中敌机,2架大敌机
  214.             add_small_enemies(small_enemies,enemies,5)
  215.             add_mid_enemies(mid_enemies,enemies,3)
  216.             add_big_enemies(big_enemies,enemies,2)

  217.             #提升小中飞机速度
  218.             inc_speed(small_enemies,1)
  219.             inc_speed(mid_enemies,1)
  220.         elif level==3 and score>600000:
  221.             level=4
  222.             upgrade_sound.play()
  223.             #增加5架小飞机,3架中敌机,2架大敌机
  224.             add_small_enemies(small_enemies,enemies,5)
  225.             add_mid_enemies(mid_enemies,enemies,3)
  226.             add_big_enemies(big_enemies,enemies,2)

  227.             #提升小中飞机速度
  228.             inc_speed(small_enemies,1)
  229.             inc_speed(mid_enemies,1)
  230.         elif level==4 and score>1000000:
  231.             level=5
  232.             upgrade_sound.play()
  233.             #增加5架小飞机,3架中敌机,2架大敌机
  234.             add_small_enemies(small_enemies,enemies,5)
  235.             add_mid_enemies(mid_enemies,enemies,3)
  236.             add_big_enemies(big_enemies,enemies,2)

  237.             #提升小中飞机速度
  238.             inc_speed(small_enemies,1)
  239.             inc_speed(mid_enemies,1)

  240.             
  241.         screen.blit(background,(0,0))   

  242.         if life_num and not paused:
  243.             #检测用户键盘操作
  244.             key_pressed=pygame.key.get_pressed()

  245.             if key_pressed[K_w] or key_pressed[K_UP]:
  246.                 me.moveUp()
  247.             if key_pressed[K_s] or key_pressed[K_DOWN]:
  248.                 me.moveDown()            
  249.             if key_pressed[K_a] or key_pressed[K_LEFT]:
  250.                 me.moveLeft()
  251.             if key_pressed[K_d] or key_pressed[K_RIGHT]:
  252.                 me.moveRight()
  253.                
  254.             #绘制全屏炸弹补给并检测是否获得
  255.             if bomb_supply.active:
  256.                 bomb_supply.move()
  257.                 screen.blit(bomb_supply.image,bomb_supply.rect)
  258.                 if pygame.sprite.collide_mask(bomb_supply,me):
  259.                     get_bomb_sound.play()
  260.                     if bomb_num<3:
  261.                         bomb_num+=1
  262.                     bomb_supply.active=False

  263.             
  264.             #绘制超级子弹补给并检测是否获得
  265.             if bullet_supply.active:
  266.                 bullet_supply.move()
  267.                 screen.blit(bullet_supply.image,bullet_supply.rect)
  268.                 if pygame.sprite.collide_mask(bullet_supply,me):
  269.                     get_bullet_sound.play()
  270.                     is_double_bullet=True
  271.                     pygame.time.set_timer(DOUBLE_BULLET_TIME,18*1000)
  272.                     bullet_supply.active=False
  273.                

  274.             #发射子弹
  275.             if not(delay%10):
  276.                 bullet_sound.play()
  277.                 if is_double_bullet:
  278.                     bullets=bullet2
  279.                     bullets[bullet2_index].reset((me.rect.centerx-33,me.rect.centery))
  280.                     bullets[bullet2_index+1].reset((me.rect.centerx+30,me.rect.centery))
  281.                     bullet2_index=(bullet2_index+2)%BULLET2_NUM
  282.                 else:
  283.                     bullets=bullet1
  284.                     bullets[bullet1_index].reset(me.rect.midtop)
  285.                     bullet1_index=(bullet1_index+1)%BULLET1_NUM

  286.             #检测子弹是否击中敌机
  287.             for b in bullets:
  288.                 if b.active:
  289.                     b.move()
  290.                     screen.blit(b.image,b.rect)
  291.                     enemy_hit=pygame.sprite.spritecollide(b,enemies,False,pygame.sprite.collide_mask)
  292.                     if enemy_hit:
  293.                         b.active=False
  294.                         for e in enemy_hit:
  295.                             if e in mid_enemies or e in big_enemies:
  296.                                 e.hit=True
  297.                                 e.energy-=1
  298.                                 if e.energy==0:
  299.                                     e.active=False
  300.                             else:
  301.                                 e.active=False


  302.             #绘制大型敌机
  303.             for each in big_enemies:
  304.                 if each.active:
  305.                     each.move()
  306.                     if each.hit:
  307.                         #绘制被打倒图片
  308.                         screen.blit(each.image_hit,each.rect)
  309.                         each.hit=False
  310.                     else:
  311.                         if switch_image:
  312.                             screen.blit(each.image1,each.rect)
  313.                         else:
  314.                             screen.blit(each.image2,each.rect)
  315.                     #绘制血槽
  316.                     pygame.draw.line(screen,BLACK,\
  317.                                      (each.rect.left,each.rect.top-5),\
  318.                                      (each.rect.right,each.rect.top-5),\
  319.                                      2)   
  320.                     #当生命大于%20显示绿色,否则显示红色
  321.                     energy_remain=each.energy/enemy.BigEnemy.energy
  322.                     if energy_remain>0.2:
  323.                         energy_color=GREEN
  324.                     else:
  325.                         energy_color=RED
  326.                
  327.                     pygame.draw.line(screen,energy_color,\
  328.                                      (each.rect.left,each.rect.top-5),\
  329.                                      (each.rect.left+each.rect.width*energy_remain,\
  330.                                       each.rect.top-5),2)
  331.                     #展示大型机音效
  332.                     if each.rect.bottom==-50:
  333.                         enemy3_fly_sound.play(-1)
  334.                 else:
  335.                     #大飞机毁灭
  336.                     if not(delay%3):
  337.                         if e3_destroy_index==0:
  338.                             enemy3_down_sound.play()
  339.                         screen.blit(each.destroy_images[e3_destroy_index],each.rect)
  340.                         e3_destroy_index=(e3_destroy_index+1)%6
  341.                         if e3_destroy_index==0:
  342.                             enemy3_fly_sound.stop()
  343.                             score+=10000
  344.                             each.reset()
  345.             #绘制中型机
  346.             for each in mid_enemies:
  347.                 if each.active:
  348.                     each.move()

  349.                     if each.hit:
  350.                         screen.blit(each.image_hit,each.rect)
  351.                         each.hit=False
  352.                     else:
  353.                         screen.blit(each.image,each.rect)
  354.                     #绘制血槽
  355.                     pygame.draw.line(screen,BLACK,\
  356.                                      (each.rect.left,each.rect.top-5),\
  357.                                      (each.rect.right,each.rect.top-5),\
  358.                                      2)   
  359.                     #当生命大于%20显示绿色,否则显示红色
  360.                     energy_remain=each.energy/enemy.MidEnemy.energy
  361.                     if energy_remain>0.2:
  362.                         energy_color=GREEN
  363.                     else:
  364.                         energy_color=RED
  365.                
  366.                     pygame.draw.line(screen,energy_color,\
  367.                                      (each.rect.left,each.rect.top-5),\
  368.                                      (each.rect.left+each.rect.width*energy_remain,\
  369.                                       each.rect.top-5),2)
  370.                 else:
  371.                     #中飞机毁灭
  372.                     if not(delay%3):
  373.                         if e2_destroy_index==0:
  374.                             enemy2_down_sound.play()
  375.                         screen.blit(each.destroy_images[e2_destroy_index],each.rect)
  376.                         e2_destroy_index=(e2_destroy_index+1)%4
  377.                         if e2_destroy_index==0:
  378.                             score+=6000
  379.                             each.reset()

  380.             #绘制小型机   
  381.             for each in small_enemies:
  382.                 if each.active:
  383.                     each.move()
  384.                     screen.blit(each.image,each.rect)
  385.                 else:
  386.                     #小飞机毁灭
  387.                     if not(delay%3):
  388.                         if e1_destroy_index==0:
  389.                             enemy1_down_sound.play()
  390.                         screen.blit(each.destroy_images[e1_destroy_index],each.rect)
  391.                         e1_destroy_index=(e1_destroy_index+1)%4
  392.                         if e1_destroy_index==0:
  393.                             score+=1000
  394.                             each.reset()

  395.             #检测我方飞机是否被撞
  396.             enemies_down=pygame.sprite.spritecollide(me,enemies,False,pygame.sprite.collide_mask)
  397.             if enemies_down and not me.invincible:
  398.                 me.active=False
  399.                 for each in enemies_down:
  400.                     each.active=False
  401.             
  402.             

  403.             #绘制我方飞机
  404.             if me.active:
  405.                 if switch_image:
  406.                     screen.blit(me.image1,me.rect)
  407.                 else:
  408.                     screen.blit(me.image2,me.rect)
  409.             else:
  410.                 #本机毁灭
  411.                 if not(delay%3):
  412.                     if me_destroy_index==0:
  413.                         me_down_sound.play()
  414.                     screen.blit(me.destroy_images[me_destroy_index],me.rect)
  415.                     me_destroy_index=(me_destroy_index+1)%4
  416.                     if me_destroy_index==0:
  417.                         life_num-=1
  418.                         me.reset()
  419.                         pygame.time.set_timer(INVINCIBLE_TIME,3*1000)
  420.                         

  421.             #绘制全屏炸弹数量
  422.             bomb_text=bomb_font.render('× %d'%bomb_num,True,WHITE)
  423.             text_rect=bomb_text.get_rect()
  424.             screen.blit(bomb_image,(10,height-10-bomb_rect.height))
  425.             screen.blit(bomb_text,(20+bomb_rect.width,height-5-text_rect.height))

  426.             #绘制剩余生命数量
  427.             if life_num:
  428.                 for i in range(life_num):
  429.                     screen.blit(life_image,\
  430.                                 (width-10-(i+1)*life_rect.width,\
  431.                                  height-10-life_rect.height))
  432.             #绘制得分
  433.             score_text=score_font.render('Score : %s'%str(score),True,WHITE)
  434.             screen.blit(score_text,(10,5))
  435.             
  436.         #绘制游戏结束画面
  437.         elif life_num==0:
  438.             #背景音乐停止
  439.             pygame.mixer.music.stop()
  440.             
  441.             #停止全部音效
  442.             pygame.mixer.stop()

  443.             #停止发放补给
  444.             pygame.time.set_timer(SUPPLY_TIME,0)

  445.             if not recorded:
  446.                 #读取历史最高分
  447.                 recorded=True
  448.                 with open('record.txt','r')as f:
  449.                     record_score=int(f.read())

  450.                 #如果玩家得分高于历史最高得分,存档
  451.                 if score>record_score:
  452.                     with open('record.txt','w')as f:
  453.                         f.write(str(score))
  454.                         
  455.             #绘制结束界面
  456.             record_score_text = score_font.render("Best : %d" % record_score, True, (255, 255, 255))
  457.             screen.blit(record_score_text, (50, 50))
  458.             
  459.             gameover_text1 = gameover_font.render("Your Score", True, (255, 255, 255))
  460.             gameover_text1_rect = gameover_text1.get_rect()
  461.             gameover_text1_rect.left, gameover_text1_rect.top = \
  462.                                  (width - gameover_text1_rect.width) // 2, height // 3
  463.             screen.blit(gameover_text1, gameover_text1_rect)
  464.             
  465.             gameover_text2 = gameover_font.render(str(score), True, (255, 255, 255))
  466.             gameover_text2_rect = gameover_text2.get_rect()
  467.             gameover_text2_rect.left, gameover_text2_rect.top = \
  468.                                  (width - gameover_text2_rect.width) // 2, \
  469.                                  gameover_text1_rect.bottom + 10
  470.             screen.blit(gameover_text2, gameover_text2_rect)

  471.             again_rect.left, again_rect.top = \
  472.                              (width - again_rect.width) // 2, \
  473.                              gameover_text2_rect.bottom + 50
  474.             screen.blit(again_image, again_rect)

  475.             gameover_rect.left, gameover_rect.top = \
  476.                                 (width - again_rect.width) // 2, \
  477.                                 again_rect.bottom + 10
  478.             screen.blit(gameover_image, gameover_rect)   

  479.             # 检测用户的鼠标操作
  480.             # 如果用户按下鼠标左键
  481.             if pygame.mouse.get_pressed()[0]:
  482.                 # 获取鼠标坐标
  483.                 pos = pygame.mouse.get_pos()
  484.                 # 如果用户点击“重新开始”
  485.                 if again_rect.left < pos[0] < again_rect.right and \
  486.                    again_rect.top < pos[1] < again_rect.bottom:
  487.                     # 调用main函数,重新开始游戏
  488.                     main()
  489.                 # 如果用户点击“结束游戏”            
  490.                 elif gameover_rect.left < pos[0] < gameover_rect.right and \
  491.                      gameover_rect.top < pos[1] < gameover_rect.bottom:
  492.                     # 退出游戏
  493.                     pygame.quit()
  494.                     sys.exit()      
  495.             
  496.         

  497.         #绘制暂停按钮
  498.         screen.blit(paused_image,paused_rect)

  499.         #切换图片
  500.         if not(delay%5):
  501.             switch_image= not switch_image
  502.         delay-=1
  503.         if not delay:
  504.             delay=100
  505.         pygame.display.flip()

  506.         clock.tick(60)

  507. if __name__=='__main__':
  508.     try:
  509.         main()
  510.     except SystemExit:
  511.         pass
  512.     except:
  513.         traceback.print_exc()
  514.         pygame.quit()
  515.         input()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-24 14:21:28 | 显示全部楼层
lc88824 发表于 2024-03-24 14:21
import pygame
import sys
import traceback
from  ...


要实现飞机一次发射5发并排的子弹,需要对代码中的子弹生成部分进行适当修改。以下是修改后的代码示例:

  1. # 生成普通子弹
  2. bullet1 = []
  3. bullet1_index = 0
  4. BULLET1_NUM = 8
  5. for i in range(BULLET1_NUM // 4):
  6.     bullet1.append(bullet.Bullet1((me.rect.centerx - 33, me.rect.centery)))
  7.     bullet1.append(bullet.Bullet1((me.rect.centerx - 13, me.rect.centery)))
  8.     bullet1.append(bullet.Bullet1((me.rect.centerx + 13, me.rect.centery)))
  9.     bullet1.append(bullet.Bullet1((me.rect.centerx + 33, me.rect.centery)))

  10. while running:
  11.     # ...

  12.     if life_num and not paused:
  13.         # ...

  14.         key_pressed = pygame.key.get_pressed()
  15.         if key_pressed[K_SPACE]:
  16.             if bullet1[bullet1_index].active is False:
  17.                 bullet_sound.play()
  18.                 bullet1[bullet1_index].reset((me.rect.centerx - 33, me.rect.centery))
  19.                 bullet1[(bullet1_index + 1) % BULLET1_NUM].reset((me.rect.centerx - 13, me.rect.centery))
  20.                 bullet1[(bullet1_index + 2) % BULLET1_NUM].reset((me.rect.centerx + 13, me.rect.centery))
  21.                 bullet1[(bullet1_index + 3) % BULLET1_NUM].reset((me.rect.centerx + 33, me.rect.centery))
  22.                 bullet1_index = (bullet1_index + 4) % BULLET1_NUM

  23.         # ...

  24.     # ...
复制代码


在上述代码中,我们通过修改子弹生成部分的代码,使用了一个循环生成了4颗子弹,并对子弹的初始位置进行了四个不同的偏移。然后,在主循环中添加了按下空格键发射子弹的逻辑,当一颗子弹不处于活动状态时,设置其新的初始位置,并更新索引。这样,飞机每次按下空格键就会发射5发并排的子弹。

请注意,上述代码是在原有代码基础上的修改示例,您需要将其与原有代码进行合并。同时,如果需要使用其他类型的子弹,可以类似地进行修改和扩展。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-24 14:28:34 | 显示全部楼层
FishC 发表于 2024-3-24 14:21
要实现飞机一次发射5发并排的子弹,需要对代码中的子弹生成部分进行适当修改。以下是修改后的代码示例 ...

有这个游戏完整教学视频吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-24 14:28:47 | 显示全部楼层
lc88824 发表于 2024-03-24 14:28
有这个游戏完整教学视频吗


非常抱歉,暂时没有提供关于这个游戏的完整教学视频。不过,您可以在网上寻找相关的教学资源或者教程来学习如何制作飞机大战游戏。一些在线编程平台,例如B站、YouTube、Coursera等,可能会有相关的教学视频供您参考。此外,还可以通过阅读相关的编程教材或者参考其他类似的开源游戏项目来学习游戏开发技巧。希望您能够找到适合您的学习资源,顺利掌握制作飞机大战游戏的技能!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 10:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表