鱼C论坛

 找回密码
 立即注册
查看: 1189|回复: 0

pygame里面外星人的移动问题

[复制链接]
发表于 2022-2-20 14:30:04 | 显示全部楼层 |阅读模式

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

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

x
就是运行之后 外星人在左右移动接触到边框之后不会向下移动
下面第一个是我自己的
  1. import sys

  2. import pygame

  3. from settings import Settings
  4. from ship import Ship
  5. from bullet import Bullet
  6. from alien import Alien


  7. class AlienInvasion:
  8.     """管理游戏和行为的类"""
  9.     def __init__(self):
  10.         """初始化并创建游戏资源。"""
  11.         pygame.init()
  12.         self.settings = Settings()
  13.         self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
  14.         pygame.display.set_caption("AlienInvasion")
  15.         self.bg_color = (230,230,230)
  16.         self.ship= Ship(self)
  17.         self.bullets = pygame.sprite.Group()
  18.         self.aliens = pygame.sprite.Group()
  19.         self._create_fleet()

  20.     def run_game(self):
  21.         """开始游戏的主循环"""
  22.         while True:
  23.             # 监视键盘和鼠标事件。
  24.             self._check_events()
  25.             self.ship.update()
  26.             self._update_bullets()
  27.             self._update_aliens()
  28.             self._update_screen()

  29.     def _check_events(self):
  30.         """响应按键和鼠标事件"""
  31.         for event in pygame.event.get():
  32.             if event.type == pygame.QUIT:
  33.                 pygame.quit()
  34.                 sys.exit()
  35.             elif event.type == pygame.KEYDOWN:
  36.                 self._check_keydown_events(event)
  37.                     
  38.             elif event.type == pygame.KEYUP:
  39.                 self._check_keyup_events(event)

  40.     def _create_fleet(self):
  41.         """创建外星人群"""
  42.         #创建一个外星人群。
  43.         #创建一个外星人并计算一行可容纳多少个外星人
  44.         #外星人间距为外星人宽度
  45.         alien = Alien(self)
  46.         alien_width, alien_height = alien.rect.size
  47.         
  48.         available_space_x = self.settings.screen_width - (2*alien_width)
  49.         number_aliens_x = available_space_x // (2* alien_width)
  50.         #计算屏幕克容纳多少行外星人
  51.         ship_height = self.ship.rect.height
  52.         available_space_y = (self.settings.screen_height- (3 * alien_height) - ship_height)
  53.         number_rows = available_space_y // (2 * alien_height)
  54.         #创建外星人群
  55.         for row_number in range(number_rows):
  56.             for alien_number in range(number_aliens_x):
  57.                 self._create_alien(alien_number,row_number)

  58.    
  59.             
  60.         
  61.     def _fire_bullet(self):
  62.         """创建一颗子弹,并将其加入编组bullets中。"""
  63.         if len(self.bullets) < self.settings.bullets_allowed:
  64.             new_bullet = Bullet(self)
  65.             self.bullets.add(new_bullet)

  66.     def _update_aliens(self):
  67.         """更新外星人群中所有外星人的位置"""
  68.         self._check_fleet_edges()
  69.         self.aliens.update()

  70.         
  71.     def _update_screen(self):
  72.         """更新屏幕上的图像,并切换到新屏幕"""
  73.         self.screen.fill(self.bg_color)
  74.         self.ship.blitme()        
  75.         for bullet in self.bullets.sprites():
  76.             bullet.draw_bullet()
  77.         self.aliens.draw(self.screen)

  78.         pygame.display.flip()

  79.     def _check_keydown_events(self, event):
  80.         if event.key == pygame.K_RIGHT:
  81.             self.ship.moving_right = True
  82.         elif event.key == pygame.K_LEFT:
  83.             self.ship.moving_left = True
  84.         elif event.key == pygame.K_UP:
  85.             self.ship.moving_up = True
  86.         elif event.key == pygame.K_DOWN:
  87.             self.ship.moving_down = True
  88.         elif event.key == pygame.K_q:
  89.             pygame.quit()
  90.             sys.exit()
  91.         elif event.key == pygame.K_SPACE:
  92.             self._fire_bullet()

  93.     def _check_keyup_events(self, event):
  94.         if event.key == pygame.K_RIGHT:
  95.             self.ship.moving_right = False
  96.         elif event.key == pygame.K_LEFT:
  97.             self.ship.moving_left = False
  98.         elif event.key == pygame.K_UP:
  99.             self.ship.moving_up = False
  100.         elif event.key == pygame.K_DOWN:
  101.             self.ship.moving_down = False

  102.     def _update_bullets(self):
  103.         """更新子弹的位置并删除消失的子弹"""
  104.         self.bullets.update()
  105.         #删除消失的子弹。           
  106.         for bullet in self.bullets.copy():
  107.             if bullet.rect.bottom <=0:
  108.                 self.bullets.remove(bullet)
  109.                 print(len(self.bullets))

  110.                
  111.     def _create_alien(self, alien_number, row_number):
  112.         """创建一个外星人并放在当前行"""
  113.         alien = Alien(self)
  114.         alien_width, alien_height = alien.rect.size
  115.         alien.x = alien_width + 2*alien_width * alien_number
  116.         alien.rect.x = alien.x
  117.         alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
  118.         self.aliens.add(alien)

  119.     def _check_fleet_edges(self):
  120.         """有外星人到达边缘采取相应的措施"""
  121.         for alien in self.aliens.sprites():
  122.             if alien.check_edges():
  123.                 self._change_fleet_direction()
  124.                 break

  125.     def _change_fleet_direction(self):
  126.         """将整群外星人下移,并改变它们的方向"""
  127.         for alien in self.aliens.sprites():
  128.             alien.rect.y += self.settings.fleet_drop_speed
  129.         self.settings.fleet_direction *= -1
  130.         
  131. if __name__ == '__main__':
  132.     #创建游戏实例并运行游戏。
  133.     ai = AlienInvasion()
  134.     ai.run_game()
复制代码

第二个是案例的
  1. import sys

  2. import pygame

  3. from settings import Settings
  4. from ship import Ship
  5. from bullet import Bullet
  6. from alien import Alien


  7. class AlienInvasion:
  8.     """Overall class to manage game assets and behavior."""

  9.     def __init__(self):
  10.         """Initialize the game, and create game resources."""
  11.         pygame.init()
  12.         self.settings = Settings()

  13.         self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
  14.         self.settings.screen_width = self.screen.get_rect().width
  15.         self.settings.screen_height = self.screen.get_rect().height
  16.         pygame.display.set_caption("Alien Invasion")

  17.         self.ship = Ship(self)
  18.         self.bullets = pygame.sprite.Group()
  19.         self.aliens = pygame.sprite.Group()

  20.         self._create_fleet()

  21.     def run_game(self):
  22.         """Start the main loop for the game."""
  23.         while True:
  24.             self._check_events()
  25.             self.ship.update()
  26.             self._update_bullets()
  27.             self._update_aliens()
  28.             self._update_screen()

  29.     def _check_events(self):
  30.         """Respond to keypresses and mouse events."""
  31.         for event in pygame.event.get():
  32.             if event.type == pygame.QUIT:
  33.                 sys.exit()
  34.             elif event.type == pygame.KEYDOWN:
  35.                 self._check_keydown_events(event)
  36.             elif event.type == pygame.KEYUP:
  37.                 self._check_keyup_events(event)

  38.     def _check_keydown_events(self, event):
  39.         """Respond to keypresses."""
  40.         if event.key == pygame.K_RIGHT:
  41.             self.ship.moving_right = True
  42.         elif event.key == pygame.K_LEFT:
  43.             self.ship.moving_left = True
  44.         elif event.key == pygame.K_q:
  45.             sys.exit()
  46.         elif event.key == pygame.K_SPACE:
  47.             self._fire_bullet()

  48.     def _check_keyup_events(self, event):
  49.         """Respond to key releases."""
  50.         if event.key == pygame.K_RIGHT:
  51.             self.ship.moving_right = False
  52.         elif event.key == pygame.K_LEFT:
  53.             self.ship.moving_left = False

  54.     def _fire_bullet(self):
  55.         """Create a new bullet and add it to the bullets group."""
  56.         if len(self.bullets) < self.settings.bullets_allowed:
  57.             new_bullet = Bullet(self)
  58.             self.bullets.add(new_bullet)

  59.     def _update_bullets(self):
  60.         """Update position of bullets and get rid of old bullets."""
  61.         # Update bullet positions.
  62.         self.bullets.update()

  63.         # Get rid of bullets that have disappeared.
  64.         for bullet in self.bullets.copy():
  65.             if bullet.rect.bottom <= 0:
  66.                  self.bullets.remove(bullet)

  67.     def _update_aliens(self):
  68.         """
  69.         Check if the fleet is at an edge,
  70.           then update the positions of all aliens in the fleet.
  71.         """
  72.         self._check_fleet_edges()
  73.         self.aliens.update()

  74.     def _create_fleet(self):
  75.         """Create the fleet of aliens."""
  76.         # Create an alien and find the number of aliens in a row.
  77.         # Spacing between each alien is equal to one alien width.
  78.         alien = Alien(self)
  79.         alien_width, alien_height = alien.rect.size
  80.         available_space_x = self.settings.screen_width - (2 * alien_width)
  81.         number_aliens_x = available_space_x // (2 * alien_width)
  82.         
  83.         # Determine the number of rows of aliens that fit on the screen.
  84.         ship_height = self.ship.rect.height
  85.         available_space_y = (self.settings.screen_height -
  86.                                 (3 * alien_height) - ship_height)
  87.         number_rows = available_space_y // (2 * alien_height)
  88.         
  89.         # Create the full fleet of aliens.
  90.         for row_number in range(number_rows):
  91.             for alien_number in range(number_aliens_x):
  92.                 self._create_alien(alien_number, row_number)

  93.     def _create_alien(self, alien_number, row_number):
  94.         """Create an alien and place it in the row."""
  95.         alien = Alien(self)
  96.         alien_width, alien_height = alien.rect.size
  97.         alien.x = alien_width + 2 * alien_width * alien_number
  98.         alien.rect.x = alien.x
  99.         alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
  100.         self.aliens.add(alien)

  101.     def _check_fleet_edges(self):
  102.         """Respond appropriately if any aliens have reached an edge."""
  103.         for alien in self.aliens.sprites():
  104.             if alien.check_edges():
  105.                 self._change_fleet_direction()
  106.                 break
  107.             
  108.     def _change_fleet_direction(self):
  109.         """Drop the entire fleet and change the fleet's direction."""
  110.         for alien in self.aliens.sprites():
  111.             alien.rect.y += self.settings.fleet_drop_speed
  112.         self.settings.fleet_direction *= -1

  113.     def _update_screen(self):
  114.         """Update images on the screen, and flip to the new screen."""
  115.         self.screen.fill(self.settings.bg_color)
  116.         self.ship.blitme()
  117.         for bullet in self.bullets.sprites():
  118.             bullet.draw_bullet()
  119.         self.aliens.draw(self.screen)

  120.         pygame.display.flip()


  121. if __name__ == '__main__':
  122.     # Make a game instance, and run the game.
  123.     ai = AlienInvasion()
  124.     ai.run_game()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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