鱼C论坛

 找回密码
 立即注册
查看: 2077|回复: 2

有谁帮助我修一下bug?

[复制链接]
发表于 2022-9-24 12:49:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 夏煜哥 于 2022-9-24 13:13 编辑

我在论坛上下载了一位鱼油(忘了是谁了,如见本帖,请回复一下,十分感谢🙏)的修改版飞机大战,我自己也做出了yi~点点修改,但现在出了一个bug:在困难模式下,子弹数量会疯狂增加,完全不受控制。并且我设置了一次困难模式持续10s,但经过测试,压根不只10s。
求各位大神帮帮忙,修一下bug。

MAIN.py:
  1. import pygame
  2. import sys
  3. import traceback
  4. import myplane
  5. import enemy
  6. import bullet
  7. import supply
  8. from pygame.locals import *
  9. from random import *
  10. import time

  11. pygame.init()
  12. pygame.mixer.init()
  13. bg_size = width,height = 480,700
  14. screen = pygame.display.set_mode(bg_size)
  15. pygame.display.set_caption('飞机大战')
  16. background = pygame.image.load('images/background2.png').convert()
  17. ice_bg = pygame.image.load('images/ice_bg.png').convert_alpha()
  18. ice = pygame.image.load('images/ice.png').convert_alpha()

  19. # 设置一些颜色
  20. BLACK = (0,0,0)
  21. WHITE = (255,255,255)
  22. GREEN = (0,255,0)
  23. RED = (255,0,0)
  24. # 加载背景音乐及音效
  25. pygame.mixer.music.load("sound/bg_music.mp3")
  26. pygame.mixer.music.set_volume(0.2)
  27. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  28. bullet_sound.set_volume(0.2)
  29. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  30. bomb_sound.set_volume(0.2)
  31. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  32. supply_sound.set_volume(0.2)
  33. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  34. get_bomb_sound.set_volume(0.2)
  35. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  36. get_bullet_sound.set_volume(0.2)
  37. get_heart_sound = pygame.mixer.Sound("sound/get_heart.wav")
  38. get_heart_sound.set_volume(0.2)
  39. get_ice_sound = pygame.mixer.Sound("sound/get_ice.wav")
  40. get_ice_sound.set_volume(0.2)
  41. lose_ice_sound = pygame.mixer.Sound("sound/lose_ice.wav")
  42. lose_ice_sound.set_volume(0.2)
  43. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  44. upgrade_sound.set_volume(0.2)
  45. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  46. enemy3_fly_sound.set_volume(0.2)
  47. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  48. enemy1_down_sound.set_volume(0.2)
  49. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  50. enemy2_down_sound.set_volume(0.2)
  51. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  52. enemy3_down_sound.set_volume(0.5)
  53. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  54. me_down_sound.set_volume(0.2)
  55. # 定义生成小型敌机函数
  56. def add_small_enemies(group1,group2,num):
  57.     for i in range(num):
  58.         e1 = enemy.SmallEnemy(bg_size)
  59.         group1.add(e1)
  60.         group2.add(e1)
  61. # 定义生成中型敌机函数
  62. def add_mid_enemies(group1,group2,num):
  63.     for i in range(num):
  64.         e2 = enemy.MidEnemy(bg_size)
  65.         group1.add(e2)
  66.         group2.add(e2)
  67. # 定义生成大型敌机函数
  68. def add_big_enemies(group1,group2,num):
  69.     for i in range(num):
  70.         e3 = enemy.BigEnemy(bg_size)
  71.         group1.add(e3)
  72.         group2.add(e3)
  73. # 定义改变敌机速度函数
  74. def inc_speed(target, inc):
  75.     for each in target:
  76.         each.speed += inc

  77. def add_boss(g):
  78.     boss = enemy.boss(bg_size)
  79.     g.add(boss)
  80.    
  81.         
  82. # 主程序
  83. def main():
  84.     # 循环播放背景音乐
  85.     pygame.mixer.music.play(-1)
  86.     # 生成我方飞机
  87.     me = myplane.MyPlane(bg_size)
  88.     # 创建敌机组
  89.     enemies = pygame.sprite.Group()
  90.     # 生成小型敌机
  91.     small_enemies = pygame.sprite.Group()
  92.     add_small_enemies(small_enemies,enemies,20)
  93.     # 生成中型敌机
  94.     mid_enemies = pygame.sprite.Group()
  95.     add_mid_enemies(mid_enemies,enemies,2)
  96.     # 生成大型敌机
  97.     big_enemies = pygame.sprite.Group()
  98.     add_big_enemies(big_enemies,enemies,1)

  99.     # 初始化子弹
  100.     bullet1 = []
  101.     bullet1_index = 0
  102.     BULLET1_NUM = 4
  103.     for i in range(BULLET1_NUM):
  104.         bullet1.append(bullet.Bullet1(me.rect.midtop))
  105.     # 初始化超级子弹
  106.     bullet2 = []
  107.     bullet2_index = 0
  108.     BULLET2_NUM = 8
  109.     for i in range(BULLET2_NUM // 2):
  110.         bullet2.append(bullet.Bullet2((me.rect.centerx - 33, me.rect.centery)))
  111.         bullet2.append(bullet.Bullet2((me.rect.centerx + 30, me.rect.centery)))
  112.     # 初始化四层子弹
  113.     bullet3 = []
  114.     bullet3_index = 0
  115.     bullet3_num = 16
  116.     for i in range(bullet3_num // 4):
  117.         bullet3.append(bullet.Bullet3((me.rect.centerx - 63, me.rect.centery)))
  118.         bullet3.append(bullet.Bullet3((me.rect.centerx - 23, me.rect.centery)))
  119.         bullet3.append(bullet.Bullet3((me.rect.centerx + 23, me.rect.centery)))
  120.         bullet3.append(bullet.Bullet3((me.rect.centerx + 63, me.rect.centery)))
  121.     # 初始化延时器
  122.     clock = pygame.time.Clock()
  123.     # 定义绘制飞机索引
  124.     e1_destroy_index = 0
  125.     e2_destroy_index = 0
  126.     e3_destroy_index = 0
  127.     me_destroy_index = 0
  128.     # 初始化得分
  129.     score = 0
  130.     score_font = pygame.font.Font('font/font.ttf',36)

  131.     supply_font = pygame.font.Font('font/font.ttf',20)
  132.    
  133.     # 初始化暂停按钮和状态
  134.     paused = False
  135.     pause_nor_image = pygame.image.load('images/pause_nor.png').convert_alpha()
  136.     pause_pressed_image = pygame.image.load('images/pause_pressed.png').convert_alpha()
  137.     resume_nor_image = pygame.image.load('images/resume_nor.png').convert_alpha()
  138.     resume_pressed_image = pygame.image.load('images/resume_pressed.png').convert_alpha()
  139.     paused_rect = pause_nor_image.get_rect()
  140.     paused_rect.left,paused_rect.top = width - paused_rect.width - 10,10
  141.     paused_image = pause_nor_image
  142.     # 初始化禁音按钮和状态
  143.     silence = False
  144.     volume_on_pressed_image = pygame.image.load('images/sound_open.png').convert_alpha()
  145.     volume_on_image = pygame.image.load('images/sound_open_not.png').convert_alpha()
  146.     volume_off_pressed_image = pygame.image.load('images/sound_close.png').convert_alpha()
  147.     volume_off_image = pygame.image.load('images/sound_close_not.png').convert_alpha()
  148.     volume_rect = volume_on_image.get_rect()
  149.     volume_rect.left, volume_rect.top = width - paused_rect.width - 10, 65
  150.     volume_image = volume_on_image
  151.     # 初始化全屏炸弹显示
  152.     bomb_image = pygame.image.load("images/bomb.png").convert_alpha()
  153.     bomb_rect = bomb_image.get_rect()
  154.     bomb_font = pygame.font.Font("font/font.ttf", 48)
  155.     bomb_num = 6
  156.     # 初始化补给
  157.     bullet_supply = supply.Bullet_Supply(bg_size)
  158.     bomb_supply = supply.Bomb_Supply(bg_size)
  159.     heart_supply = supply.Heart_Supply(bg_size)
  160.     ice_supply = supply.Ice_Supply(bg_size)
  161.     fire_supply = supply.Fire_Supply(bg_size)
  162.     b_enemy_bullet_supply = supply.Big_Enemy_Bullet_Supply(bg_size)
  163.     b_enemy_bomb_supply = supply.Big_Enemy_Bomb_Supply(bg_size)
  164.     SUPPLY_TIME = USEREVENT
  165.     pygame.time.set_timer(SUPPLY_TIME,20 * 1000)
  166.     DOUBLE_BULLET_TIME = USEREVENT + 1
  167.     is_double_bullet = False
  168.     is_super_bullet = False
  169.     is_normal_bullet = True
  170.     HARDCODE_STOP = USEREVENT
  171.    
  172.     # 初始化无敌状态
  173.     INVINCIBLE_TIME = USEREVENT + 2
  174.     life_image = pygame.image.load('images/life.png').convert_alpha()
  175.     life_rect = life_image.get_rect()
  176.     life_num = 3

  177.     INVINCIBLE_TIME2 = USEREVENT + 3
  178.     # 左上角补给时间计时
  179.     SUPPLY_IMG_MOVE = USEREVENT + 4
  180.     INVINCIBLE = USEREVENT + 5

  181.     #左上角补给时间初始化
  182.     supply_num = 20
  183.     #死亡后无敌时间计时
  184.     inv_num = 0
  185.     inv_img = pygame.image.load('images/s5(1).jpg').convert_alpha()
  186.     inv_rect = inv_img.get_rect()
  187.    
  188.     have_ice = False

  189.     #定时减少子弹数量计时
  190.     BULLET_NUM_TIME = USEREVENT + 6
  191.     pygame.time.set_timer(BULLET_NUM_TIME,5 * 1000)
  192.     #右下角子弹数量字体
  193.     bullet_font = pygame.font.Font("font/font.ttf", 32)
  194.     kill_enemy = 0 #击落敌人总数
  195.     bullet_move = True
  196.     #困难模式时左侧 “!”字体
  197.     hardcode_font = pygame.font.Font('font/font.ttf',84)
  198.    
  199.     # 避免反复读取文件
  200.     recorded = False
  201.     # 初始化游戏结束元素
  202.     gameover_font = pygame.font.Font("font/font.TTF", 48)
  203.     again_image = pygame.image.load("images/again.png").convert_alpha()
  204.     again_rect = again_image.get_rect()
  205.     gameover_image = pygame.image.load("images/gameover.png").convert_alpha()
  206.     gameover_rect = gameover_image.get_rect()
  207.     #是否被冰冻
  208.     flozen = False
  209.     FLOZEN_TIME = USEREVENT + 3
  210.     S2 = USEREVENT + 3
  211.     pygame.time.set_timer(S2,30*1000)
  212.     bg_posy = -700
  213.     switch_image = True
  214.     delay = 100
  215.     running = True
  216.     pygame.time.set_timer(SUPPLY_IMG_MOVE,1*1000)
  217.     #是否为困难模式
  218.     is_hardcode = False
  219.    
  220.     while running:
  221.         for event in pygame.event.get():
  222.             if event.type == QUIT:
  223.                 # 退出
  224.                 sys.exit()
  225.             elif event.type == MOUSEBUTTONDOWN:
  226.                 if event.button == 1 and paused_rect.collidepoint(event.pos):
  227.                     # 暂停或开始
  228.                     paused = not paused
  229.                     if paused:
  230.                         # 停止发放补给
  231.                         pygame.time.set_timer(SUPPLY_TIME, 0)
  232.                         # 停止播放音乐
  233.                         pygame.mixer.music.pause()
  234.                         pygame.mixer.pause()
  235.                     elif not paused and not silence:
  236.                         # 设置发放补给
  237.                         pygame.time.set_timer(SUPPLY_TIME, 30 * 1000)
  238.                         # 继续播放音乐
  239.                         pygame.mixer.music.unpause()
  240.                         pygame.mixer.unpause()
  241.                 if event.button == 1 and volume_rect.collidepoint(event.pos):
  242.                     silence = not silence
  243.                     if silence:
  244.                         pygame.mixer.music.pause()
  245.                         pygame.mixer.pause()
  246.                     elif not paused and not silence:
  247.                         pygame.mixer.music.unpause()
  248.                         pygame.mixer.unpause()
  249.             elif event.type == MOUSEMOTION:
  250.                 # 如果用户点击了暂停按钮
  251.                 if paused_rect.collidepoint(event.pos):
  252.                     if paused:
  253.                         paused_image = resume_pressed_image
  254.                     else:
  255.                         paused_image = pause_pressed_image
  256.                 else:
  257.                     if paused:
  258.                         paused_image = resume_nor_image
  259.                     else:
  260.                         paused_image = pause_nor_image
  261.                 # 如果用户点击了禁音按钮
  262.                 if volume_rect.collidepoint(event.pos):
  263.                     if silence:
  264.                         volume_image = volume_off_pressed_image
  265.                     else:
  266.                         volume_image = volume_on_pressed_image
  267.                 else:
  268.                     if silence:
  269.                         volume_image = volume_off_image
  270.                     else:
  271.                         volume_image = volume_on_image
  272.             elif event.type == KEYDOWN:
  273.                 # 用户使用了全屏炸弹
  274.                 if event.key == K_SPACE:
  275.                     if bomb_num:
  276.                         bomb_num -= 1
  277.                         if not silence:
  278.                             bomb_sound.play()
  279.                         for each in enemies:
  280.                             if each.rect.bottom > 0:
  281.                                 each.active = False
  282.                 #使用冰
  283.                 if event.key == K_RSHIFT:
  284.                     if have_ice:
  285.                         have_ice = False
  286.                         pygame.time.set_timer(FLOZEN_TIME, 5 * 1000)
  287.                         flozen = True
  288.                 #开始/停止射击
  289.                 if event.key == K_BACKSPACE:
  290.                     if bullet_move:
  291.                         bullet_move = False
  292.                         pygame.time.set_timer(BULLET_NUM_TIME, 0)
  293.                     else:
  294.                         bullet_move = True
  295.                         pygame.time.set_timer(BULLET_NUM_TIME,5*1000)

  296.                
  297.             
  298.             elif event.type == SUPPLY_TIME:
  299.                 supply_num = 20
  300.                 # 发放补给
  301.                 if not silence:
  302.                     supply_sound.play()
  303.                 me.bullet_num += 300
  304.                 # 随机的补给内容
  305.                 choose = choice([1,2,3,4,5])
  306.                 if choose == 1:
  307.                     bomb_supply.reset(me.rect)
  308.                 elif choose == 2:
  309.                     bullet_supply.reset(me.rect)
  310.                 elif choose == 3:
  311.                     fire_supply.reset(me.rect)
  312.                 elif choose == 4:
  313.                     ice_supply.reset(me.rect)
  314.                 elif choose == 5:
  315.                     heart_supply.reset(me.rect)
  316.             elif event.type == DOUBLE_BULLET_TIME:
  317.                 # 结束超级子弹的使用
  318.                 is_double_bullet = False
  319.                 is_super_bullet = False
  320.                 pygame.time.set_timer(DOUBLE_BULLET_TIME, 0)
  321.             elif event.type == INVINCIBLE_TIME:
  322.                 me.invincible = False
  323.                 pygame.time.set_timer(INVINCIBLE_TIME,0)
  324.             elif event.type == FLOZEN_TIME:
  325.                 if not silence:
  326.                     lose_ice_sound.play()
  327.                 flozen = False
  328.                 pygame.time.set_timer(FLOZEN_TIME, 0)
  329.             #左侧补给时间减少
  330.             elif event.type == SUPPLY_IMG_MOVE:
  331.                 supply_num -= 1
  332.             #左侧无敌时间减少
  333.             elif event.type == INVINCIBLE:
  334.                 inv_num -= 1
  335.             #右下子弹数减少
  336.             elif event.type == BULLET_NUM_TIME:
  337.                 if me.bullet_num < 0:
  338.                     me.bullet_num = 0
  339.                 else:
  340.                     me.bullet_num -= 100
  341.                     if is_double_bullet:
  342.                         me.bullet_num -= 200
  343.                     if is_super_bullet:
  344.                         me.bullet_num -= 4
  345.             elif event.type == HARDCODE_STOP:
  346.                 is_hardcode = False
  347.                     
  348.         # 困难模式
  349.         if not is_hardcode:
  350.             if randint(1,7500) == 1:
  351.                 is_hardcode = True
  352.                 pygame.time.set_timer(HARDCODE_STOP,10*1)

  353.         if is_hardcode:
  354.             if randint(1,100) == 5:
  355.                 add_small_enemies(small_enemies,enemies,randint(1,2))
  356.             elif randint(1,250) == 10:
  357.                 add_mid_enemies(mid_enemies,enemies,randint(1,2))
  358.             elif randint(1,1000) == 1000:
  359.                 add_big_enemies(big_enemies,enemies,1)
  360.             
  361.         
  362.         # 绘制背景
  363.         if bg_posy >= 0 and not paused and not flozen:
  364.             bg_posy = -700
  365.         if not paused and not flozen:
  366.             bg_posy += 0.5
  367.             
  368.         screen.blit(background, (0, bg_posy))
  369.         if life_num and not paused:
  370.             if not flozen:
  371.                 key_pressed = pygame.key.get_pressed()
  372.                 if key_pressed[K_w] or key_pressed[K_UP]:
  373.                     me.moveUp()
  374.                 if key_pressed[K_s] or key_pressed[K_DOWN]:
  375.                     me.moveDown()
  376.                 if key_pressed[K_a] or key_pressed[K_LEFT]:
  377.                     me.moveLeft()
  378.                 if key_pressed[K_d] or key_pressed[K_RIGHT]:
  379.                     me.moveRight()
  380.             if bomb_supply.active:
  381.                 if not flozen:
  382.                     bomb_supply.move()
  383.                 screen.blit(bomb_supply.image, bomb_supply.rect)
  384.                 if pygame.sprite.collide_mask(bomb_supply, me):
  385.                     if not silence:
  386.                         get_bomb_sound.play()
  387.                     if bomb_num < 12:
  388.                         bomb_num += 1
  389.                     bomb_supply.active = False
  390.             if bullet_supply.active:
  391.                 if not flozen:
  392.                     bullet_supply.move()
  393.                 screen.blit(bullet_supply.image, bullet_supply.rect)
  394.                 if pygame.sprite.collide_mask(bullet_supply, me):
  395.                     if not silence:
  396.                         get_bullet_sound.play()
  397.                     is_double_bullet = True
  398.                     is_super_bullet = False
  399.                     pygame.time.set_timer(DOUBLE_BULLET_TIME, 18 * 1000)
  400.                     bullet_supply.active = False
  401.             if heart_supply.active:
  402.                 if not flozen:
  403.                     heart_supply.move()
  404.                 screen.blit(heart_supply.image, heart_supply.rect)
  405.                 if pygame.sprite.collide_mask(heart_supply, me):
  406.                     if not silence:
  407.                         get_heart_sound.play()
  408.                     if life_num > 0:
  409.                         life_num += 1
  410.                     heart_supply.active = False
  411.             if ice_supply.active:
  412.                 if not flozen:
  413.                     ice_supply.move()
  414.                 screen.blit(ice_supply.image, ice_supply.rect)
  415.                 if pygame.sprite.collide_mask(ice_supply, me):
  416.                     if not silence:
  417.                         get_ice_sound.play()
  418.                         '''
  419.                     pygame.time.set_timer(FLOZEN_TIME, 5 * 1000)
  420.                     flozen = True
  421.                     '''
  422.                     ice_supply.active = False
  423.                     have_ice = True
  424.             if fire_supply.active:
  425.                 if not flozen:
  426.                     fire_supply.move()
  427.                 screen.blit(fire_supply.image, fire_supply.rect)
  428.                 if pygame.sprite.collide_mask(fire_supply, me):
  429.                     if not silence:
  430.                         get_bullet_sound.play()
  431.                     is_super_bullet = True
  432.                     is_double_bullet = False
  433.                     pygame.time.set_timer(DOUBLE_BULLET_TIME, 18 * 1000)
  434.                     fire_supply.active = False
  435.                     '''
  436.             if not(delay % 10) and not flozen:
  437.                 if not silence:
  438.                     if me.bullet_num and bullet_move:
  439.                         bullet_sound.play()
  440.                     if is_double_bullet:
  441.                         bullets = bullet2
  442.                         bullets[bullet2_index].reset((me.rect.centerx-33, me.rect.centery))
  443.                         bullets[bullet2_index + 1].reset((me.rect.centerx+30, me.rect.centery))
  444.                         bullet2_index = (bullet2_index + 2) % BULLET2_NUM
  445.                     elif is_super_bullet:
  446.                         bullets = bullet3
  447.                         bullets[bullet3_index].reset((me.rect.centerx - 63, me.rect.centery))
  448.                         bullets[bullet3_index + 1].reset((me.rect.centerx - 23, me.rect.centery))
  449.                         bullets[bullet3_index + 2].reset((me.rect.centerx + 23, me.rect.centery))
  450.                         bullets[bullet3_index + 3].reset((me.rect.centerx + 63, me.rect.centery))
  451.                         bullet3_index = (bullet3_index + 4) % bullet3_num
  452.                     else:
  453.                         bullets = bullet1
  454.                         bullets[bullet1_index].reset(me.rect.midtop)
  455.                         bullet1_index = (bullet1_index + 1) % BULLET1_NUM
  456.             for b in bullets:
  457.                 if me.bullet_num and bullet_move:
  458.                     if b.active and not flozen:
  459.                         b.move()
  460.                         screen.blit(b.image,b.rect)
  461.                         enemy_hit = pygame.sprite.spritecollide(b,enemies,False,pygame.sprite.collide_mask)
  462.                         if enemy_hit:
  463.                             b.active = False
  464.                             for e in enemy_hit:
  465.                                 if e in mid_enemies or e in big_enemies:
  466.                                     e.hit = True
  467.                                     e.energy -= 1
  468.                                     if e.energy == 0:
  469.                                         e.active = False
  470.                                 else:
  471.                                     e.active = False
  472.             '''
  473.             if not(delay % 10) and not flozen:
  474.                 if not silence:
  475.                     if me.bullet_num > 0 and bullet_move:
  476.                         bullet_sound.play()
  477.                     if is_double_bullet:
  478.                         bullet2[bullet2_index].reset((me.rect.centerx-33, me.rect.centery))
  479.                         bullet2[bullet2_index + 1].reset((me.rect.centerx+33, me.rect.centery))
  480.                         bullet2_index = (bullet2_index + 2) % BULLET2_NUM
  481.                     if is_super_bullet:
  482.                         bullet3[bullet3_index].reset((me.rect.centerx - 116, me.rect.centery))
  483.                         bullet3[bullet3_index + 1].reset((me.rect.centerx - 76, me.rect.centery))
  484.                         bullet3[bullet3_index + 2].reset((me.rect.centerx + 76, me.rect.centery))
  485.                         bullet3[bullet3_index + 3].reset((me.rect.centerx + 116, me.rect.centery))
  486.                         bullet3_index = (bullet3_index + 4) % bullet3_num
  487.                     
  488.                     if is_normal_bullet:
  489.                         bullet1[bullet1_index].reset(me.rect.midtop)
  490.                         bullet1_index = (bullet1_index + 1) % BULLET1_NUM
  491.             
  492.             if me.bullet_num > 0 and bullet_move:   
  493.                 for nor_b in bullet1:
  494.                     if nor_b.active and not flozen:
  495.                         nor_b.move()
  496.                         screen.blit(nor_b.image,nor_b.rect)
  497.                         enemy_hit = pygame.sprite.spritecollide(nor_b,enemies,False,pygame.sprite.collide_mask)
  498.                         if enemy_hit:
  499.                             nor_b.active = False
  500.                             for e in enemy_hit:
  501.                                 if e in mid_enemies or e in big_enemies:
  502.                                     e.hit = True
  503.                                     e.energy -= 1
  504.                                     if e.energy == 0:
  505.                                         e.active = False
  506.                                 else:
  507.                                     e.active = False

  508.                 if is_double_bullet:
  509.                     for dou_b in bullet2:
  510.                         if dou_b.active and not flozen:
  511.                             dou_b.move()
  512.                             screen.blit(dou_b.image,dou_b.rect)
  513.                             enemy_hit = pygame.sprite.spritecollide(dou_b,enemies,False,pygame.sprite.collide_mask)
  514.                             if enemy_hit:
  515.                                 dou_b.active = False
  516.                                 for e in enemy_hit:
  517.                                     if e in mid_enemies or e in big_enemies:
  518.                                         e.hit = True
  519.                                         e.energy -= 1
  520.                                         if e.energy == 0:
  521.                                             e.active = False
  522.                                     else:
  523.                                         e.active = False

  524.                 if is_super_bullet:   
  525.                     for sup_b in bullet3:
  526.                         if sup_b.active and not flozen:
  527.                             sup_b.move()
  528.                             screen.blit(sup_b.image,sup_b.rect)
  529.                             enemy_hit = pygame.sprite.spritecollide(sup_b,enemies,False,pygame.sprite.collide_mask)
  530.                             if enemy_hit:
  531.                                 sup_b.active = False
  532.                                 for e in enemy_hit:
  533.                                     if e in mid_enemies or e in big_enemies:
  534.                                         e.hit = True
  535.                                         e.energy -= 1
  536.                                         if e.energy == 0:
  537.                                             e.active = False
  538.                                     else:
  539.                                         e.active = False
  540.             for each in big_enemies:
  541.                 if each.active:
  542.                     each.move(flozen)
  543.                     if each.hit:
  544.                         screen.blit(each.image_hit,each.rect)
  545.                         each.hit = False
  546.                     else:
  547.                         if switch_image:
  548.                             screen.blit(each.image1,each.rect)
  549.                         else:
  550.                             screen.blit(each.image2,each.rect)
  551.                     pygame.draw.line(screen,BLACK,\
  552.                         (each.rect.left,each.rect.top - 5),\
  553.                         (each.rect.right,each.rect.top - 5),\
  554.                         2)
  555.                     energy_remain = each.energy / enemy.BigEnemy.energy
  556.                     if energy_remain > 0.2:
  557.                         energy_color = GREEN
  558.                     else:
  559.                         energy_color = RED
  560.                     pygame.draw.line(screen,energy_color,\
  561.                         (each.rect.left,each.rect.top - 5),\
  562.                         (each.rect.left + each.rect.width * energy_remain,\
  563.                             each.rect.top - 5),2)
  564.                     if each.rect.bottom == -50 and not silence:
  565.                         enemy3_fly_sound.play(-1)
  566.                 else:
  567.                     if not (delay % 3):
  568.                         if e3_destroy_index == 0 and not silence:
  569.                             enemy3_down_sound.play()
  570.                         screen.blit(each.destroy_images[e3_destroy_index],each.rect)
  571.                         e3_destroy_index = (e3_destroy_index + 1) % 6
  572.                         if e3_destroy_index == 0:
  573.                             enemy3_fly_sound.stop()
  574.                             score += 12000
  575.                             each.reset()
  576.                             if randint(1,5) == 5:
  577.                                 bomb_sound.play()
  578.                                 for each in enemies:
  579.                                     if each.rect.bottom > 0:
  580.                                         each.active = False
  581.             for each in mid_enemies:
  582.                 if each.active:
  583.                     each.move(flozen)
  584.                     if each.hit:
  585.                         screen.blit(each.image_hit,each.rect)
  586.                         each.hit = False
  587.                     else:
  588.                         screen.blit(each.image,each.rect)
  589.                     pygame.draw.line(screen,BLACK,\
  590.                         (each.rect.left,each.rect.top - 5),\
  591.                         (each.rect.right,each.rect.top - 5),\
  592.                         2)
  593.                     energy_remain = each.energy / enemy.MidEnemy.energy
  594.                     if energy_remain > 0.2:
  595.                         energy_color = GREEN
  596.                     else:
  597.                         energy_color = RED
  598.                     pygame.draw.line(screen,energy_color,\
  599.                         (each.rect.left,each.rect.top - 5),\
  600.                         (each.rect.left + each.rect.width * energy_remain,\
  601.                             each.rect.top - 5),2)
  602.                 else:
  603.                     if not (delay % 3):
  604.                         if e2_destroy_index == 0 and not silence:
  605.                             enemy2_down_sound.play()
  606.                         screen.blit(each.destroy_images[e2_destroy_index],each.rect)
  607.                         e2_destroy_index = (e2_destroy_index + 1) % 4
  608.                         if e2_destroy_index == 0:
  609.                             score += 8000
  610.                             kill_enemy += 6
  611.                             each.reset()
  612.                             if randint(1,4) == 4:
  613.                                 choose = choice([1,5,2,3,4])
  614.                                 if choose == 1:
  615.                                     bomb_supply.reset(me.rect)
  616.                                 elif choose == 2:
  617.                                     bullet_supply.reset(me.rect)
  618.                                 elif choose == 3:
  619.                                     fire_supply.reset(me.rect)
  620.                                 elif choose == 4:
  621.                                     ice_supply.reset(me.rect)
  622.                                 elif choose == 5:
  623.                                     heart_supply.reset(me.rect)
  624.             for each in small_enemies:
  625.                 if each.active:
  626.                     each.move(flozen)
  627.                     screen.blit(each.image,each.rect)
  628.                 else:
  629.                     if not (delay % 3):
  630.                         if e1_destroy_index == 0 and not silence:
  631.                             enemy1_down_sound.play()
  632.                         screen.blit(each.destroy_images[e1_destroy_index],each.rect)
  633.                         e1_destroy_index = (e1_destroy_index + 1) % 4
  634.                         if e1_destroy_index == 0:
  635.                             score += 1500
  636.                             kill_enemy += 1
  637.                             each.reset()

  638.             if kill_enemy == 12:
  639.                 kill_enemy = 0
  640.                 me.bullet_num += 50
  641.                            
  642.             enemies_down = pygame.sprite.spritecollide(me, enemies, False, pygame.sprite.collide_mask)
  643.             if enemies_down and not me.invincible:
  644.                 me.active = False
  645.                 for e in enemies_down:
  646.                     e.active = False
  647.             if me.active:
  648.                 if not me.invincible:
  649.                     if delay // 5 % 2 and not flozen:
  650.                         screen.blit(me.image1, me.rect)
  651.                     else:
  652.                         screen.blit(me.image2, me.rect)
  653.                 else:
  654.                     if delay % 10 < 7:
  655.                         screen.blit(me.image1, me.rect)
  656.             else:
  657.                 if not silence:
  658.                     me_down_sound.play()
  659.                 if not (delay % 3):
  660.                     screen.blit(me.destroy_images[me_destroy_index],me.rect)
  661.                     me_destroy_index = (me_destroy_index + 1) % 4
  662.                     if me_destroy_index == 0:
  663.                         life_num -= 1
  664.                         me.reset()
  665.                         pygame.time.set_timer(INVINCIBLE_TIME,8 * 1000)
  666.                         pygame.time.set_timer(INVINCIBLE,1 * 1000)
  667.                         inv_num = 8
  668.                     
  669.             if flozen:
  670.                 screen.blit(ice_bg,(0,0))
  671.             bomb_text = bomb_font.render("× %d" % bomb_num, True, WHITE)
  672.             text_rect = bomb_text.get_rect()
  673.             screen.blit(bomb_image, (10, height - 10 - bomb_rect.height))
  674.             screen.blit(bomb_text, (20 + bomb_rect.width, height - 5 - text_rect.height))
  675.             if life_num:
  676.                 life_text = bomb_font.render("× %d" % life_num, True, WHITE)
  677.                 text_r = life_text.get_rect()
  678.                 screen.blit(life_image,(width-10-3*life_rect.width,height-10-life_rect.height))
  679.                 screen.blit(life_text,(400,630))
  680.                
  681.                 score_text = score_font.render('Score : %s'% str(score),True,WHITE)
  682.             screen.blit(score_text,(10,5))

  683.             supply_pic = pygame.image.load('images/supply.png').convert_alpha()
  684.             sp_rect = supply_pic.get_rect()
  685.             screen.blit(supply_pic,(10,55))

  686.             supply_str = supply_font.render(f'{supply_num}s',True,WHITE)
  687.             screen.blit(supply_str,(sp_rect.right / 2,sp_rect.bottom + 55))

  688.             bullet_str = bullet_font.render(f'bullets: {me.bullet_num}',True,WHITE)
  689.             screen.blit(bullet_str,(270,600))

  690.             if is_hardcode:
  691.                 hardcode_str = hardcode_font.render('!',True,RED)
  692.                 screen.blit(hardcode_str,(15,180))
  693.                
  694.             if me.invincible:
  695.                 screen.blit(inv_img,(10,120))
  696.                 inv_str = supply_font.render(f'{inv_num}s',True,WHITE)
  697.                 screen.blit(inv_str,(inv_rect.right / 2,inv_rect.bottom + 120))
  698.             
  699.             if have_ice:
  700.                 screen.blit(ice,(10,570))

  701.             if me.invincible:
  702.                 enemies_down = pygame.sprite.spritecollide(me, enemies, False, pygame.sprite.collide_mask)
  703.                 if enemies_down and me.invincible:
  704.                     for e in enemies_down:
  705.                         e.active = False
  706.                     score += 500
  707.         elif life_num == 0:
  708.             pygame.mixer.music.stop()
  709.             pygame.mixer.stop()
  710.             pygame.time.set_timer(SUPPLY_TIME,0)
  711.             if not recorded:
  712.                 recorded = True
  713.                 with open("record.txt", "r") as f:
  714.                     record_score = int(f.read())
  715.                 if score > record_score:
  716.                     with open("record.txt", "w") as f:
  717.                         f.write(str(score))
  718.             record_score_text = score_font.render("Best : %d" % record_score, True, (255, 255, 255))

  719.             gameover_text1 = gameover_font.render("Your Score", True, (255, 255, 255))
  720.             gameover_text1_rect = gameover_text1.get_rect()
  721.             gameover_text1_rect.left, gameover_text1_rect.top = \
  722.                                  (width - gameover_text1_rect.width) // 2, height // 3
  723.             screen.blit(gameover_text1, gameover_text1_rect)
  724.             gameover_text2 = gameover_font.render(str(score), True, (255, 255, 255))
  725.             gameover_text2_rect = gameover_text2.get_rect()
  726.             gameover_text2_rect.left, gameover_text2_rect.top = \
  727.                                  (width - gameover_text2_rect.width) // 2, \
  728.                                  gameover_text1_rect.bottom + 10
  729.             screen.blit(gameover_text2, gameover_text2_rect)
  730.             again_rect.left, again_rect.top = \
  731.                              (width - again_rect.width) // 2, \
  732.                              gameover_text2_rect.bottom + 50
  733.             screen.blit(again_image, again_rect)
  734.             gameover_rect.left, gameover_rect.top = \
  735.                                 (width - again_rect.width) // 2, \
  736.                                 again_rect.bottom + 10
  737.             screen.blit(gameover_image, gameover_rect)
  738.             if pygame.mouse.get_pressed()[0]:
  739.                 pos = pygame.mouse.get_pos()
  740.                 if again_rect.left < pos[0] < again_rect.right and \
  741.                     again_rect.top < pos[1] < again_rect.bottom:
  742.                     main()
  743.                 elif gameover_rect.left < pos[0] < gameover_rect.right and \
  744.                      gameover_rect.top < pos[1] < gameover_rect.bottom:
  745.                     pygame.quit()
  746.                     sys.exit()
  747.         screen.blit(paused_image,paused_rect)
  748.         screen.blit(volume_image, volume_rect)
  749.         if not(delay % 5):
  750.             switch_image = not switch_image
  751.         delay -= 1
  752.         if not delay:
  753.             delay = 100
  754.         pygame.display.flip()
  755.         clock.tick(60)
  756. main()

复制代码


myplane.py:
  1. import pygame
  2. class MyPlane(pygame.sprite.Sprite):
  3.     bullet_num = 9000
  4.     def __init__(self,bg_size):
  5.         pygame.sprite.Sprite.__init__(self)
  6.         self.image1 = pygame.image.load('images/me1.png').convert_alpha()
  7.         self.image2 = pygame.image.load('images/me2.png').convert_alpha()
  8.         self.destroy_images = []
  9.         self.destroy_images.extend([\
  10.             pygame.image.load("images/me_destroy_1.png").convert_alpha(), \
  11.             pygame.image.load("images/me_destroy_2.png").convert_alpha(), \
  12.             pygame.image.load("images/me_destroy_3.png").convert_alpha(), \
  13.             pygame.image.load("images/me_destroy_4.png").convert_alpha() \
  14.             ])
  15.         self.rect = self.image1.get_rect()
  16.         self.width,self.height = bg_size[0],bg_size[1]
  17.         self.rect.left, self.rect.top = \
  18.                         (self.width - self.rect.width) // 2, \
  19.                         self.height - self.rect.height - 90
  20.         self.speed = 10
  21.         self.active = True
  22.         self.invincible = False
  23.         self.mask = pygame.mask.from_surface(self.image1)
  24.     def moveUp(self):
  25.         if self.rect.top > 0:
  26.             self.rect.top -= self.speed
  27.         else:
  28.             self.rect.top = 0
  29.     def moveDown(self):
  30.         if self.rect.bottom < self.height - 90:
  31.             self.rect.top += self.speed
  32.         else:
  33.             self.rect.bottom = self.height - 90
  34.     def moveLeft(self):
  35.         if self.rect.left > 0:
  36.             self.rect.left -= self.speed
  37.         else:
  38.             self.rect.left = 0
  39.     def moveRight(self):
  40.         if self.rect.right < self.width:
  41.             self.rect.left += self.speed
  42.         else:
  43.             self.rect.right = self.width
  44.     def reset(self):
  45.         self.rect.left, self.rect.top = \
  46.                         (self.width - self.rect.width) // 2, \
  47.                         self.height - self.rect.height - 60
  48.         self.active = True
  49.         self.invincible = True


复制代码


supply.py:
  1. import pygame
  2. from random import *

  3. class Bullet_Supply(pygame.sprite.Sprite):
  4.     def __init__(self, bg_size):
  5.         pygame.sprite.Sprite.__init__(self)
  6.         self.image = pygame.image.load("images/bullet_supply.png").convert_alpha()
  7.         self.rect = self.image.get_rect()
  8.         self.width, self.height = bg_size[0], bg_size[1]
  9.         self.rect.left, self.rect.bottom = \
  10.                         randint(0, self.width - self.rect.width), -100
  11.         self.speed = 5
  12.         self.active = False
  13.         self.mask = pygame.mask.from_surface(self.image)
  14.     def move(self):
  15.         if self.rect.top < self.height:
  16.             self.rect.top += self.speed
  17.         else:
  18.             self.active = False
  19.     def reset(self,me):
  20.         self.active = True
  21.         if randint(0,1):
  22.             self.rect.left, self.rect.bottom = \
  23.                       me.left, -100

  24.         else:
  25.             self.rect.left, self.rect.bottom = \
  26.                         randint(0, self.width - self.rect.width), -100
  27. class Big_Enemy_Bullet_Supply(Bullet_Supply):
  28.     def __init__(self,bg_size):
  29.         pygame.sprite.Sprite.__init__(self)
  30.         self.image = pygame.image.load("images/big_enemy_bullet_supply.png").convert_alpha()
  31.         self.rect = self.image.get_rect()
  32.         self.width, self.height = bg_size[0], bg_size[1]
  33.         self.rect.left, self.rect.bottom = \
  34.                         randint(0, self.width - self.rect.width), -100
  35.         self.speed = 5
  36.         self.active = False
  37.         self.mask = pygame.mask.from_surface(self.image)
  38.     def move(self):
  39.         if self.rect.top < self.height:
  40.             self.rect.top += self.speed
  41.         else:
  42.             self.active = False
  43.     def reset(self,me):
  44.         self.active = True
  45.         if randint(0,1):
  46.             self.rect.left, self.rect.bottom = \
  47.                       me.left, -100

  48.         else:
  49.             self.rect.left, self.rect.bottom = \
  50.                         randint(0, self.width - self.rect.width), -100
  51. class Bomb_Supply(pygame.sprite.Sprite):
  52.     def __init__(self, bg_size):
  53.         pygame.sprite.Sprite.__init__(self)
  54.         self.image = pygame.image.load("images/bomb_supply.png").convert_alpha()
  55.         self.rect = self.image.get_rect()
  56.         self.width, self.height = bg_size[0], bg_size[1]
  57.         self.rect.left, self.rect.bottom = \
  58.                         randint(0, self.width - self.rect.width), -100
  59.         self.speed = 5
  60.         self.active = False
  61.         self.mask = pygame.mask.from_surface(self.image)
  62.     def move(self):
  63.         if self.rect.top < self.height:
  64.             self.rect.top += self.speed
  65.         else:
  66.             self.active = False
  67.     def reset(self,me):
  68.         self.active = True
  69.         if randint(0,1):
  70.             self.rect.left, self.rect.bottom = \
  71.                       me.left, -100

  72.         else:
  73.             self.rect.left, self.rect.bottom = \
  74.                         randint(0, self.width - self.rect.width), -100
  75. class Big_Enemy_Bomb_Supply(Bomb_Supply):
  76.     def __init__(self,bg_size):
  77.         pygame.sprite.Sprite.__init__(self)
  78.         self.image = pygame.image.load("images/big_enemy_bomb_supply.png").convert_alpha()
  79.         self.rect = self.image.get_rect()
  80.         self.width, self.height = bg_size[0], bg_size[1]
  81.         self.rect.left, self.rect.bottom = \
  82.                         randint(0, self.width - self.rect.width), -100
  83.         self.speed = 5
  84.         self.active = False
  85.         self.mask = pygame.mask.from_surface(self.image)
  86.     def move(self):
  87.         if self.rect.top < self.height:
  88.             self.rect.top += self.speed
  89.         else:
  90.             self.active = False
  91.     def reset(self,me):
  92.         self.active = True
  93.         if randint(0,1):
  94.             self.rect.left, self.rect.bottom = \
  95.                       me.left, -100

  96.         else:
  97.             self.rect.left, self.rect.bottom = \
  98.                         randint(0, self.width - self.rect.width), -100
  99.             
  100. class Heart_Supply(pygame.sprite.Sprite):
  101.     def __init__(self, bg_size):
  102.         pygame.sprite.Sprite.__init__(self)
  103.         self.image = pygame.image.load("images/heart_supply.png").convert_alpha()
  104.         self.rect = self.image.get_rect()
  105.         self.width, self.height = bg_size[0], bg_size[1]
  106.         self.rect.left, self.rect.bottom = \
  107.                         randint(0, self.width - self.rect.width), -100
  108.         self.speed = 5
  109.         self.active = False
  110.         self.mask = pygame.mask.from_surface(self.image)
  111.     def move(self):
  112.         if self.rect.top < self.height:
  113.             self.rect.top += self.speed
  114.         else:
  115.             self.active = False
  116.     def reset(self,me):
  117.         self.active = True
  118.         if randint(0,1):
  119.             self.rect.left, self.rect.bottom = \
  120.                       me.left, -100

  121.         else:
  122.             self.rect.left, self.rect.bottom = \
  123.                         randint(0, self.width - self.rect.width), -100
  124. class Ice_Supply(pygame.sprite.Sprite):
  125.     def __init__(self, bg_size):
  126.         pygame.sprite.Sprite.__init__(self)
  127.         self.image = pygame.image.load("images/ice_supply.png").convert_alpha()
  128.         self.rect = self.image.get_rect()
  129.         self.width, self.height = bg_size[0], bg_size[1]
  130.         self.rect.left, self.rect.bottom = \
  131.                         randint(0, self.width - self.rect.width), -100
  132.         self.speed = 5
  133.         self.active = False
  134.         self.mask = pygame.mask.from_surface(self.image)
  135.     def move(self):
  136.         if self.rect.top < self.height:
  137.             self.rect.top += self.speed
  138.         else:
  139.             self.active = False
  140.     def reset(self,me):
  141.         self.active = True
  142.         if randint(0,1):
  143.             self.rect.left, self.rect.bottom = \
  144.                       me.left, -100

  145.         else:
  146.             self.rect.left, self.rect.bottom = \
  147.                         randint(0, self.width - self.rect.width), -100
  148. class Fire_Supply(pygame.sprite.Sprite):
  149.     def __init__(self, bg_size):
  150.         pygame.sprite.Sprite.__init__(self)
  151.         self.image = pygame.image.load("images/bullet2_supply.png").convert_alpha()
  152.         self.rect = self.image.get_rect()
  153.         self.width, self.height = bg_size[0], bg_size[1]
  154.         self.rect.left, self.rect.bottom = \
  155.                         randint(0, self.width - self.rect.width), -100
  156.         self.speed = 5
  157.         self.active = False
  158.         self.mask = pygame.mask.from_surface(self.image)
  159.     def move(self):
  160.         if self.rect.top < self.height:[code]\
复制代码

            self.rect.top += self.speed
        else:
            self.active = False
    def reset(self,me):
        self.active = True
        if randint(0,1):
            self.rect.left, self.rect.bottom = \
                      me.left, -100

        else:
            self.rect.left, self.rect.bottom = \
                        randint(0, self.width - self.rect.width), -100

[/code]

bullet.py:
  1. import pygame
  2. class Bullet1(pygame.sprite.Sprite):
  3.     def __init__(self,position):
  4.         pygame.sprite.Sprite.__init__(self)
  5.         self.image = pygame.image.load("images/bullet1.png").convert_alpha()
  6.         self.image2 = pygame.image.load("images/b1.png").convert_alpha()
  7.         self.rect = self.image.get_rect()
  8.         self.rect.left, self.rect.top = position
  9.         self.speed = 12
  10.         self.active = True
  11.         self.mask = pygame.mask.from_surface(self.image)
  12.     def move(self):
  13.         self.rect.top -= self.speed
  14.         if self.rect.top < 0:
  15.             self.active = False
  16.     def reset(self, position):
  17.         self.rect.left, self.rect.top = position
  18.         self.active = True
  19. class Bullet2(pygame.sprite.Sprite):
  20.     def __init__(self, position):
  21.         pygame.sprite.Sprite.__init__(self)
  22.         self.image = pygame.image.load("images/bullet2.png").convert_alpha()
  23.         self.rect = self.image.get_rect()
  24.         self.rect.left, self.rect.top = position
  25.         self.speed = 15
  26.         self.active = False
  27.         self.mask = pygame.mask.from_surface(self.image)
  28.     def move(self):
  29.         self.rect.top -= self.speed
  30.         if self.rect.top < 0:
  31.             self.active = False
  32.     def reset(self, position):
  33.         self.rect.left, self.rect.top = position
  34.         self.active = True
  35. class Bullet3(pygame.sprite.Sprite):
  36.     def __init__(self, position):
  37.         pygame.sprite.Sprite.__init__(self)
  38.         self.image = pygame.image.load('images/bullet3.png').convert_alpha()
  39.         self.rect = self.image.get_rect()
  40.         self.rect.left, self.rect.top = position
  41.         self.speed = 18
  42.         self.active = True
  43.         self.mask = pygame.mask.from_surface(self.image)
  44.     def move(self):
  45.         self.rect.top -= self.speed
  46.         if self.rect.top < 0:
  47.             self.active = False
  48.     def reset(self, position):
  49.         self.rect.left, self.rect.top = position
  50.         self.active = True

复制代码


enemy.py:

  1. import pygame
  2. from random import *
  3. class SmallEnemy(pygame.sprite.Sprite):
  4.     def __init__(self,bg_size):
  5.         pygame.sprite.Sprite.__init__(self)
  6.         self.image = pygame.image.load('images/enemy1.png').convert_alpha()
  7.         self.destroy_images = []
  8.         self.destroy_images.extend([\
  9.             pygame.image.load("images/enemy1_down1.png").convert_alpha(), \
  10.             pygame.image.load("images/enemy1_down2.png").convert_alpha(), \
  11.             pygame.image.load("images/enemy1_down3.png").convert_alpha(), \
  12.             pygame.image.load("images/enemy1_down4.png").convert_alpha() \
  13.             ])
  14.         self.rect = self.image.get_rect()
  15.         self.width,self.height = bg_size[0],bg_size[1]
  16.         self.speed = 2
  17.         self.active = True
  18.         self.rect.left,self.rect.top = \
  19.                         randint(0,self.width - self.rect.width),\
  20.                         randint(-5 * self.height,0)
  21.         self.mask = pygame.mask.from_surface(self.image)
  22.     def move(self,flozen):
  23.         if not flozen:
  24.             if self.rect.top < self.height:
  25.                 self.rect.top += self.speed
  26.             else:
  27.                 self.reset()
  28.     def reset(self):
  29.         self.active = True
  30.         self.rect.left,self.rect.top = \
  31.                     randint(0,self.width - self.rect.width),\
  32.                     randint(-5 * self.height,0)
  33. class MidEnemy(pygame.sprite.Sprite):
  34.     energy = 8
  35.     def __init__(self,bg_size):
  36.         pygame.sprite.Sprite.__init__(self)
  37.         self.image = pygame.image.load('images/enemy2.png').convert_alpha()
  38.         self.image_hit = pygame.image.load('images/enemy2_hit.png').convert_alpha()
  39.         self.destroy_images = []
  40.         self.destroy_images.extend([\
  41.             pygame.image.load("images/enemy2_down1.png").convert_alpha(), \
  42.             pygame.image.load("images/enemy2_down2.png").convert_alpha(), \
  43.             pygame.image.load("images/enemy2_down3.png").convert_alpha(), \
  44.             pygame.image.load("images/enemy2_down4.png").convert_alpha() \
  45.             ])
  46.         self.rect = self.image.get_rect()
  47.         self.width,self.height = bg_size[0],bg_size[1]
  48.         self.speed = 1
  49.         self.active = True
  50.         self.rect.left,self.rect.top = \
  51.                         randint(0,self.width - self.rect.width),\
  52.                         randint(-10 * self.height,-self.height)
  53.         self.mask = pygame.mask.from_surface(self.image)
  54.         self.energy = MidEnemy.energy
  55.         self.hit = False
  56.     def move(self,flozen):
  57.         if not flozen:
  58.             if self.rect.top < self.height:
  59.                 self.rect.top += self.speed
  60.             else:
  61.                 self.reset()
  62.     def reset(self):
  63.         self.active = True
  64.         self.energy = MidEnemy.energy
  65.         self.rect.left,self.rect.top = \
  66.                     randint(0,self.width - self.rect.width),\
  67.                     randint(-10 * self.height,-self.height)
  68. class BigEnemy(pygame.sprite.Sprite):
  69.     energy = 20
  70.     def __init__(self,bg_size):
  71.         pygame.sprite.Sprite.__init__(self)
  72.         self.image1 = pygame.image.load('images/enemy3_n1.png').convert_alpha()
  73.         self.image2 = pygame.image.load('images/enemy3_n2.png').convert_alpha()
  74.         self.image_hit = pygame.image.load('images/enemy3_hit.png').convert_alpha()
  75.         self.destroy_images = []
  76.         self.destroy_images.extend([\
  77.             pygame.image.load("images/enemy3_down1.png").convert_alpha(), \
  78.             pygame.image.load("images/enemy3_down2.png").convert_alpha(), \
  79.             pygame.image.load("images/enemy3_down3.png").convert_alpha(), \
  80.             pygame.image.load("images/enemy3_down4.png").convert_alpha(), \
  81.             pygame.image.load("images/enemy3_down5.png").convert_alpha(), \
  82.             pygame.image.load("images/enemy3_down6.png").convert_alpha() \
  83.             ])
  84.         self.rect = self.image1.get_rect()
  85.         self.width,self.height = bg_size[0],bg_size[1]
  86.         self.speed = 1
  87.         self.active = True
  88.         self.rect.left,self.rect.top = \
  89.                         randint(0,self.width - self.rect.width),\
  90.                         randint(-15 * self.height,-5 * self.height)
  91.         self.mask = pygame.mask.from_surface(self.image1)
  92.         self.energy = BigEnemy.energy
  93.         self.hit = False
  94.     def move(self,flozen):
  95.         if not flozen:
  96.             if self.rect.top < self.height:
  97.                 self.rect.top += self.speed
  98.             else:
  99.                 self.reset()
  100.     def reset(self):
  101.         self.active = True
  102.         self.energy = BigEnemy.energy
  103.         self.rect.left,self.rect.top = \
  104.                     randint(0,self.width - self.rect.width),\
  105.                     randint(-15 * self.height,-5 * self.height)


  106. class boss(pygame.sprite.Sprite):
  107.     energy = 50
  108.     t = 0
  109.     def __init__(self,bg_size):
  110.         pygame.sprite.Sprite.__init__(self)
  111.         self.image = pygame.image.load('images/hm1.png').convert_alpha()
  112.         self.destroy_images = []
  113.         self.destroy_images.extend([\
  114.             pygame.image.load("images/hm3.png").convert_alpha(), \
  115.             pygame.image.load("images/hm5.png").convert_alpha(), \
  116.             pygame.image.load("images/hm8.png").convert_alpha(), \
  117.             ])
  118.         self.rect = self.image.get_rect()
  119.         self.width,self.height = bg_size[0],bg_size[1]
  120.         self.speed = 0.5
  121.         self.active = True
  122.         self.rect.left,self.rect.top = \
  123.                         randint(0,self.width - self.rect.width),\
  124.                         randint(-15 * self.height,-5 * self.height)
  125.         self.mask = pygame.mask.from_surface(self.image)
  126.         self.energy = BigEnemy.energy
  127.         self.hit = False
  128.     def move(self,flozen):
  129.         if not flozen:
  130.             if self.rect.top < self.height:
  131.                 if self.t == 0:
  132.                     self.rect.left += speed
  133.                     self.t += 1
  134.                 else:
  135.                     self.rect.left -= speed
  136.                     self.t -= 1
  137.                     
  138.                 self.rect.top += self.speed
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-24 14:53:40 | 显示全部楼层


就怕牵一发而动全身,哈哈

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-24 18:51:54 | 显示全部楼层
找了一下应该是主程序补给方面出问题了,因为进入困难模式不停的发出补给的声音
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 14:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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