鱼C论坛

 找回密码
 立即注册
查看: 1199|回复: 14

[已解决]打飞机,157行,'Bullet_myplane' object has no attribute 'myplane_pos...

[复制链接]
发表于 2020-5-8 16:42:45 | 显示全部楼层 |阅读模式

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

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

x
错误显示:self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
               AttributeError: 'Bullet_myplane' object has no attribute 'myplane_position'
其他模块没有问题,加了子弹模块后报错的

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

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]

  50.         
  51.         
  52.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  53.         self.press_can_K_w = True
  54.         self.press_can_K_s = True
  55.         self.press_can_K_a = True
  56.         self.press_can_K_d = True


  57.         
  58.         
  59.     def move(self):        
  60.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  61.             self.rect.left = 0
  62.             self.press_can_K_a = False
  63.             
  64.         elif self.rect.right >  self.screen_width:
  65.             self.rect.right = self.screen_width
  66.             self.press_can_K_d = False

  67.         elif  self.rect.top  < 0 :
  68.             self.rect.top = 0
  69.             self.press_can_K_w = False
  70.             
  71.         elif self.rect.bottom >  self.screen_height:
  72.             self.rect.bottom = self.screen_height
  73.             self.press_can_K_d = False
  74.             
  75.         else:
  76.             self.press_can_K_w = True
  77.             self.press_can_K_s = True
  78.             self.press_can_K_a = True
  79.             self.press_can_K_d = True

  80. class Bullet_myplane(pygame.sprite.Sprite):
  81.     def __init__(self,bg_size,myplane_position):
  82.         pygame.sprite.Sprite.__init__(self)  #继承类
  83.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  84.         self.rect = self.image.get_rect()
  85.         self.width,self.height =bg_size[0], bg_size[1]
  86.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
  87.         self.speed = -5

  88.     def bullet_move(self):
  89.         if self.rect.bottom > 0:
  90.             self.rect.top += self.speed
  91.         else:
  92.             self.reset()

  93.     def reset(self):
  94.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]

  95.    

  96. class Enemyplane(pygame.sprite.Sprite):
  97.     def __init__(self,bg_size,position):
  98.         pygame.sprite.Sprite.__init__(self)  #继承类
  99.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  100.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  101.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  102.         self.rect = self.image.get_rect()
  103.         self.width,self.height =bg_size[0], bg_size[1]
  104.         self.rect.left,self.rect.top = position
  105.         self.speed = 5
  106.                     
  107.     def enemy_move(self):
  108.         if self.rect.top < self.height:
  109.             self.rect.top += self.speed
  110.         else:
  111.             self.reset()

  112.     def reset(self):
  113.         self.rect.left,self.rect.top = \
  114.                                      randint(0,self.width-self.rect.width),\
  115.                                      randint(-2*self.height,0)


  116. def main():
  117.     pygame.init()
  118.     bg_size = width,height = 480,700
  119.     screen = pygame.display.set_mode(bg_size)
  120.     pygame.display.set_caption("飞机大战")
  121.     background = pygame.image.load("image/background.png").convert()

  122.     BLACK = (0,0,0)
  123.     GREEN = (0,255,0)
  124.     RED = (255,0,0)

  125.    
  126.     pygame.mixer.music.play(-1)   #无限循环背景
  127.     clock = pygame.time.Clock()
  128.     pygame.key.set_repeat(10,10)

  129.     #生成我方飞机
  130.     myplane = Myplane(bg_size)

  131.    
  132.     #生成子弹
  133.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹
  134.    
  135.     group = pygame.sprite.Group()
  136.     #在屏幕最上方随机产生小飞机
  137.     position = randint(0,width-40),0
  138.     you = Enemyplane(bg_size,position)
  139.     group.add(you)

  140.     #延时
  141.     delay = 1000
  142.         
  143.     #用于切换图片
  144.     switch_image = True

  145.    
  146.     running = True
  147.     while running:
  148.         for event in pygame.event.get():
  149.             if event.type == QUIT:
  150.                 pygame.quit()
  151.                 sys.exit()

  152.             elif event.type == KEYDOWN:
  153.                 myplane.move()  
  154.                 if event.key == K_w and myplane.press_can_K_w == True :
  155.                     myplane.rect.top -= 10
  156.                   
  157.                 if event.key == K_s and myplane.press_can_K_s == True :
  158.                     myplane.rect.bottom += 10   
  159.                   
  160.                 if event.key == K_a and myplane.press_can_K_a == True :
  161.                     myplane.rect.left -= 10
  162.                   
  163.                 if event.key == K_d and myplane.press_can_K_d == True :
  164.                     myplane.rect.right += 10
  165.                     
  166.         #绘制子弹           
  167.         myplane_bullet. bullet_move()
  168.         screen.blit(myplane_bullet.image,myplane_bullet.rect)

  169.         screen.blit(background,(0,0))


  170.         #绘制我方飞机
  171.         switch_image = not switch_image  #取反,实现不断切换
  172.         if switch_image:
  173.             screen.blit(myplane.myplane_1_image,myplane.rect)            
  174.         else:
  175.             screen.blit(myplane.myplane_2_image,myplane.rect)
  176.         

  177.         #绘制敌方飞机
  178.         for each in group:
  179.             each.enemy_move()
  180.             screen.blit(you.image,you.rect)

  181.         delay -= 1
  182.         if not delay:   #如果delay为0
  183.             delay == 200
  184.             
  185.         if pygame.sprite.spritecollide(myplane, group, False):
  186.             screen.blit(you.breakdown_image1,you.rect)   
  187.             screen.blit(myplane.destroy_image1,myplane.rect)
  188.             screen.blit(myplane.destroy_image2,myplane.rect)
  189.             screen.blit(myplane.destroy_image3,myplane.rect)
  190.             me_down_sound.play()
  191.             pygame.mixer.music.pause()
  192.             you.speed = 0
  193.             myplane.speed = 0

  194.             
  195.         pygame.display.flip()
  196.         clock.tick(60)
  197.         
  198.         
  199.         
  200. if __name__ =="__main__":
  201.     #在双击打开文件时,如果出现异常,将异常显示出来
  202.     try:
  203.         main()
  204.     except SystemExit:
  205.         pass
  206.     except:
  207.         traceback.print_exc()
  208.         pygame.quit()
  209.         input()

复制代码







        

        
最佳答案
2020-5-8 17:00:59
猪猪虾 发表于 2020-5-8 16:51
什么意思,那只是定义的一个形参而已,我传进去的是飞机的位置

但是你的 reset 里什么都没传
  1. import sys
  2. import traceback
  3. from pygame.locals import *
  4. import pygame
  5. import random
  6. from random import *
  7. import math

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]

  50.         
  51.         
  52.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  53.         self.press_can_K_w = True
  54.         self.press_can_K_s = True
  55.         self.press_can_K_a = True
  56.         self.press_can_K_d = True


  57.         
  58.         
  59.     def move(self):        
  60.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  61.             self.rect.left = 0
  62.             self.press_can_K_a = False
  63.             
  64.         elif self.rect.right >  self.screen_width:
  65.             self.rect.right = self.screen_width
  66.             self.press_can_K_d = False

  67.         elif  self.rect.top  < 0 :
  68.             self.rect.top = 0
  69.             self.press_can_K_w = False
  70.             
  71.         elif self.rect.bottom >  self.screen_height:
  72.             self.rect.bottom = self.screen_height
  73.             self.press_can_K_d = False
  74.             
  75.         else:
  76.             self.press_can_K_w = True
  77.             self.press_can_K_s = True
  78.             self.press_can_K_a = True
  79.             self.press_can_K_d = True

  80. class Bullet_myplane(pygame.sprite.Sprite):
  81.     def __init__(self,bg_size,myplane_position):
  82.         pygame.sprite.Sprite.__init__(self)  #继承类
  83.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  84.         self.rect = self.image.get_rect()
  85.         self.width,self.height =bg_size[0], bg_size[1]
  86.         self.myplane_position=myplane_position
  87.         self.reset()
  88.         self.speed = -5

  89.     def bullet_move(self):
  90.         if self.rect.bottom > 0:
  91.             self.rect.top += self.speed
  92.         else:
  93.             self.reset()

  94.     def reset(self):
  95.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]

  96.    

  97. class Enemyplane(pygame.sprite.Sprite):
  98.     def __init__(self,bg_size,position):
  99.         pygame.sprite.Sprite.__init__(self)  #继承类
  100.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  101.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  102.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  103.         self.rect = self.image.get_rect()
  104.         self.width,self.height =bg_size[0], bg_size[1]
  105.         self.rect.left,self.rect.top = position
  106.         self.speed = 5
  107.                     
  108.     def enemy_move(self):
  109.         if self.rect.top < self.height:
  110.             self.rect.top += self.speed
  111.         else:
  112.             self.reset()

  113.     def reset(self):
  114.         self.rect.left,self.rect.top = \
  115.                                      randint(0,self.width-self.rect.width),\
  116.                                      randint(-2*self.height,0)


  117. def main():
  118.     pygame.init()
  119.     bg_size = width,height = 480,700
  120.     screen = pygame.display.set_mode(bg_size)
  121.     pygame.display.set_caption("飞机大战")
  122.     background = pygame.image.load("image/background.png").convert()

  123.     BLACK = (0,0,0)
  124.     GREEN = (0,255,0)
  125.     RED = (255,0,0)

  126.    
  127.     pygame.mixer.music.play(-1)   #无限循环背景
  128.     clock = pygame.time.Clock()
  129.     pygame.key.set_repeat(10,10)

  130.     #生成我方飞机
  131.     myplane = Myplane(bg_size)

  132.    
  133.     #生成子弹
  134.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹
  135.    
  136.     group = pygame.sprite.Group()
  137.     #在屏幕最上方随机产生小飞机
  138.     position = randint(0,width-40),0
  139.     you = Enemyplane(bg_size,position)
  140.     group.add(you)

  141.     #延时
  142.     delay = 1000
  143.         
  144.     #用于切换图片
  145.     switch_image = True

  146.    
  147.     running = True
  148.     while running:
  149.         for event in pygame.event.get():
  150.             if event.type == QUIT:
  151.                 pygame.quit()
  152.                 sys.exit()

  153.             elif event.type == KEYDOWN:
  154.                 myplane.move()  
  155.                 if event.key == K_w and myplane.press_can_K_w == True :
  156.                     myplane.rect.top -= 10
  157.                   
  158.                 if event.key == K_s and myplane.press_can_K_s == True :
  159.                     myplane.rect.bottom += 10   
  160.                   
  161.                 if event.key == K_a and myplane.press_can_K_a == True :
  162.                     myplane.rect.left -= 10
  163.                   
  164.                 if event.key == K_d and myplane.press_can_K_d == True :
  165.                     myplane.rect.right += 10
  166.                     
  167.         #绘制子弹           
  168.         myplane_bullet. bullet_move()
  169.         screen.blit(myplane_bullet.image,myplane_bullet.rect)

  170.         screen.blit(background,(0,0))


  171.         #绘制我方飞机
  172.         switch_image = not switch_image  #取反,实现不断切换
  173.         if switch_image:
  174.             screen.blit(myplane.myplane_1_image,myplane.rect)            
  175.         else:
  176.             screen.blit(myplane.myplane_2_image,myplane.rect)
  177.         

  178.         #绘制敌方飞机
  179.         for each in group:
  180.             each.enemy_move()
  181.             screen.blit(you.image,you.rect)

  182.         delay -= 1
  183.         if not delay:   #如果delay为0
  184.             delay == 200
  185.             
  186.         if pygame.sprite.spritecollide(myplane, group, False):
  187.             screen.blit(you.breakdown_image1,you.rect)   
  188.             screen.blit(myplane.destroy_image1,myplane.rect)
  189.             screen.blit(myplane.destroy_image2,myplane.rect)
  190.             screen.blit(myplane.destroy_image3,myplane.rect)
  191.             me_down_sound.play()
  192.             pygame.mixer.music.pause()
  193.             you.speed = 0
  194.             myplane.speed = 0

  195.             
  196.         pygame.display.flip()
  197.         clock.tick(60)
  198.         
  199.         
  200.         
  201. if __name__ =="__main__":
  202.     #在双击打开文件时,如果出现异常,将异常显示出来
  203.     try:
  204.         main()
  205.     except SystemExit:
  206.         pass
  207.     except:
  208.         traceback.print_exc()
  209.         pygame.quit()
  210.         input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 16:45:26 | 显示全部楼层
发一下子弹模块
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 16:47:14 | 显示全部楼层
wuqramy 发表于 2020-5-8 16:45
发一下子弹模块

92行那,我都放在一起了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 16:48:02 | 显示全部楼层
子弹模块出了问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 16:49:37 | 显示全部楼层
myplane_position并不通用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 16:51:17 | 显示全部楼层
wuqramy 发表于 2020-5-8 16:49
myplane_position并不通用

什么意思,那只是定义的一个形参而已,我传进去的是飞机的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 16:57:49 | 显示全部楼层
本帖最后由 whosyourdaddy 于 2020-5-8 17:00 编辑

   def reset(self):
        self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]
这里忘了传位置
在bullet文件里
还有把self删掉,myplane_position是传进来的参数,不是自身的变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 16:59:54 | 显示全部楼层
猪猪虾 发表于 2020-5-8 16:51
什么意思,那只是定义的一个形参而已,我传进去的是飞机的位置

你的bullet里面没有myplane_position这个参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 17:00:59 | 显示全部楼层    本楼为最佳答案   
猪猪虾 发表于 2020-5-8 16:51
什么意思,那只是定义的一个形参而已,我传进去的是飞机的位置

但是你的 reset 里什么都没传
  1. import sys
  2. import traceback
  3. from pygame.locals import *
  4. import pygame
  5. import random
  6. from random import *
  7. import math

  8. pygame.init()
  9. pygame.mixer.init()


  10. #载入游戏音乐
  11. pygame.mixer.music.load("sound/game_music.ogg")
  12. pygame.mixer.music.set_volume(0.2)
  13. bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
  14. bullet_sound.set_volume(0.2)
  15. bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
  16. bomb_sound.set_volume(0.2)
  17. supply_sound = pygame.mixer.Sound("sound/supply.wav")
  18. supply_sound.set_volume(0.2)
  19. get_bomb_sound = pygame.mixer.Sound("sound/get_bomb.wav")
  20. get_bomb_sound.set_volume(0.2)
  21. get_bullet_sound = pygame.mixer.Sound("sound/get_bullet.wav")
  22. get_bullet_sound.set_volume(0.2)
  23. upgrade_sound = pygame.mixer.Sound("sound/upgrade.wav")
  24. upgrade_sound.set_volume(0.2)
  25. enemy3_fly_sound = pygame.mixer.Sound("sound/enemy3_flying.wav")
  26. enemy3_fly_sound.set_volume(0.2)
  27. enemy1_down_sound = pygame.mixer.Sound("sound/enemy1_down.wav")
  28. enemy1_down_sound.set_volume(0.2)
  29. enemy2_down_sound = pygame.mixer.Sound("sound/enemy2_down.wav")
  30. enemy2_down_sound.set_volume(0.2)
  31. enemy3_down_sound = pygame.mixer.Sound("sound/enemy3_down.wav")
  32. enemy3_down_sound.set_volume(0.2)
  33. me_down_sound = pygame.mixer.Sound("sound/me_down.wav")
  34. me_down_sound.set_volume(0.2)


  35. class Myplane(pygame.sprite.Sprite):
  36.     def __init__(self,bg_size):
  37.         pygame.sprite.Sprite.__init__(self)  #继承类

  38.         self.myplane_1_image = pygame.image.load("image/me1.png").convert_alpha()
  39.         self.myplane_2_image = pygame.image.load("image/me2.png").convert_alpha()
  40.         self.rect = self.myplane_1_image.get_rect()
  41.         self.destroy_image1 = pygame.image.load("image/me_destroy_1.png").convert_alpha()
  42.         self.destroy_image2 = pygame.image.load("image/me_destroy_2.png").convert_alpha()
  43.         self.destroy_image3 = pygame.image.load("image/me_destroy_3.png").convert_alpha()
  44.         self.rect = self.myplane_1_image.get_rect()
  45.         self.rect.left,self.rect.top = \
  46.                                  (bg_size[0] - self.rect.width) // 2 ,\
  47.                                   bg_size[1] - self.rect.height
  48.         self.screen_width,self.screen_height = bg_size[0],bg_size[1]
  49.         self.speed = [0,0]

  50.         
  51.         
  52.         #如果按下W,A,S,D,表示飞机分别向上下左右移动
  53.         self.press_can_K_w = True
  54.         self.press_can_K_s = True
  55.         self.press_can_K_a = True
  56.         self.press_can_K_d = True


  57.         
  58.         
  59.     def move(self):        
  60.         if self.rect.left  < 0  :  #超过左边界,键盘a按下无效
  61.             self.rect.left = 0
  62.             self.press_can_K_a = False
  63.             
  64.         elif self.rect.right >  self.screen_width:
  65.             self.rect.right = self.screen_width
  66.             self.press_can_K_d = False

  67.         elif  self.rect.top  < 0 :
  68.             self.rect.top = 0
  69.             self.press_can_K_w = False
  70.             
  71.         elif self.rect.bottom >  self.screen_height:
  72.             self.rect.bottom = self.screen_height
  73.             self.press_can_K_d = False
  74.             
  75.         else:
  76.             self.press_can_K_w = True
  77.             self.press_can_K_s = True
  78.             self.press_can_K_a = True
  79.             self.press_can_K_d = True

  80. class Bullet_myplane(pygame.sprite.Sprite):
  81.     def __init__(self,bg_size,myplane_position):
  82.         pygame.sprite.Sprite.__init__(self)  #继承类
  83.         self.image = pygame.image.load("image/bullet2.png").convert_alpha()
  84.         self.rect = self.image.get_rect()
  85.         self.width,self.height =bg_size[0], bg_size[1]
  86.         self.myplane_position=myplane_position
  87.         self.reset()
  88.         self.speed = -5

  89.     def bullet_move(self):
  90.         if self.rect.bottom > 0:
  91.             self.rect.top += self.speed
  92.         else:
  93.             self.reset()

  94.     def reset(self):
  95.         self.rect.left,self.rect.top = self.myplane_position[0],self.myplane_position[1]

  96.    

  97. class Enemyplane(pygame.sprite.Sprite):
  98.     def __init__(self,bg_size,position):
  99.         pygame.sprite.Sprite.__init__(self)  #继承类
  100.         self.image = pygame.image.load("image/enemy1.png").convert_alpha()
  101.         self.breakdown_image1 = pygame.image.load("image/enemy1_down1.png").convert_alpha()
  102.         self.breakdown_image2 = pygame.image.load("image/enemy2_down1.png").convert_alpha()

  103.         self.rect = self.image.get_rect()
  104.         self.width,self.height =bg_size[0], bg_size[1]
  105.         self.rect.left,self.rect.top = position
  106.         self.speed = 5
  107.                     
  108.     def enemy_move(self):
  109.         if self.rect.top < self.height:
  110.             self.rect.top += self.speed
  111.         else:
  112.             self.reset()

  113.     def reset(self):
  114.         self.rect.left,self.rect.top = \
  115.                                      randint(0,self.width-self.rect.width),\
  116.                                      randint(-2*self.height,0)


  117. def main():
  118.     pygame.init()
  119.     bg_size = width,height = 480,700
  120.     screen = pygame.display.set_mode(bg_size)
  121.     pygame.display.set_caption("飞机大战")
  122.     background = pygame.image.load("image/background.png").convert()

  123.     BLACK = (0,0,0)
  124.     GREEN = (0,255,0)
  125.     RED = (255,0,0)

  126.    
  127.     pygame.mixer.music.play(-1)   #无限循环背景
  128.     clock = pygame.time.Clock()
  129.     pygame.key.set_repeat(10,10)

  130.     #生成我方飞机
  131.     myplane = Myplane(bg_size)

  132.    
  133.     #生成子弹
  134.     myplane_bullet = Bullet_myplane(bg_size,myplane.rect)  #想把飞机的实时位置传给子弹
  135.    
  136.     group = pygame.sprite.Group()
  137.     #在屏幕最上方随机产生小飞机
  138.     position = randint(0,width-40),0
  139.     you = Enemyplane(bg_size,position)
  140.     group.add(you)

  141.     #延时
  142.     delay = 1000
  143.         
  144.     #用于切换图片
  145.     switch_image = True

  146.    
  147.     running = True
  148.     while running:
  149.         for event in pygame.event.get():
  150.             if event.type == QUIT:
  151.                 pygame.quit()
  152.                 sys.exit()

  153.             elif event.type == KEYDOWN:
  154.                 myplane.move()  
  155.                 if event.key == K_w and myplane.press_can_K_w == True :
  156.                     myplane.rect.top -= 10
  157.                   
  158.                 if event.key == K_s and myplane.press_can_K_s == True :
  159.                     myplane.rect.bottom += 10   
  160.                   
  161.                 if event.key == K_a and myplane.press_can_K_a == True :
  162.                     myplane.rect.left -= 10
  163.                   
  164.                 if event.key == K_d and myplane.press_can_K_d == True :
  165.                     myplane.rect.right += 10
  166.                     
  167.         #绘制子弹           
  168.         myplane_bullet. bullet_move()
  169.         screen.blit(myplane_bullet.image,myplane_bullet.rect)

  170.         screen.blit(background,(0,0))


  171.         #绘制我方飞机
  172.         switch_image = not switch_image  #取反,实现不断切换
  173.         if switch_image:
  174.             screen.blit(myplane.myplane_1_image,myplane.rect)            
  175.         else:
  176.             screen.blit(myplane.myplane_2_image,myplane.rect)
  177.         

  178.         #绘制敌方飞机
  179.         for each in group:
  180.             each.enemy_move()
  181.             screen.blit(you.image,you.rect)

  182.         delay -= 1
  183.         if not delay:   #如果delay为0
  184.             delay == 200
  185.             
  186.         if pygame.sprite.spritecollide(myplane, group, False):
  187.             screen.blit(you.breakdown_image1,you.rect)   
  188.             screen.blit(myplane.destroy_image1,myplane.rect)
  189.             screen.blit(myplane.destroy_image2,myplane.rect)
  190.             screen.blit(myplane.destroy_image3,myplane.rect)
  191.             me_down_sound.play()
  192.             pygame.mixer.music.pause()
  193.             you.speed = 0
  194.             myplane.speed = 0

  195.             
  196.         pygame.display.flip()
  197.         clock.tick(60)
  198.         
  199.         
  200.         
  201. if __name__ =="__main__":
  202.     #在双击打开文件时,如果出现异常,将异常显示出来
  203.     try:
  204.         main()
  205.     except SystemExit:
  206.         pass
  207.     except:
  208.         traceback.print_exc()
  209.         pygame.quit()
  210.         input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 17:21:58 | 显示全部楼层
求求你了发帖求助之前能不能检查下代码
视频里面写的清清楚楚
九成是你粗心打错了
天天发这种贴让人找茬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 20:44:50 | 显示全部楼层
98行之前加一句:
  1. self.myplane_position=myplane_position
复制代码

可以跑起来了,不过你的发射子弹的代码还没写吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:36:03 | 显示全部楼层
老八秘制 发表于 2020-5-8 17:21
求求你了发帖求助之前能不能检查下代码
视频里面写的清清楚楚
九成是你粗心打错了

您没发现这大部分是我自己写的嘛,,除了基本定义,思路都不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:42:24 | 显示全部楼层
txxcat 发表于 2020-5-8 20:44
98行之前加一句:

可以跑起来了,不过你的发射子弹的代码还没写吧?

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

使用道具 举报

发表于 2020-5-9 08:45:57 | 显示全部楼层
猪猪虾 发表于 2020-5-9 08:36
您没发现这大部分是我自己写的嘛,,除了基本定义,思路都不一样

这很明显的BUG自己检查不出来?根本没设 myplane_position 另一个函数怎么用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 08:50:03 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-9 08:45
这很明显的BUG自己检查不出来?根本没设 myplane_position 另一个函数怎么用?

菜鸟菜鸟,大佬们多包容
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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