|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
就是运行之后 外星人在左右移动接触到边框之后不会向下移动
下面第一个是我自己的
- import sys
- import pygame
- from settings import Settings
- from ship import Ship
- from bullet import Bullet
- from alien import Alien
- class AlienInvasion:
- """管理游戏和行为的类"""
- def __init__(self):
- """初始化并创建游戏资源。"""
- pygame.init()
- self.settings = Settings()
- self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
- pygame.display.set_caption("AlienInvasion")
- self.bg_color = (230,230,230)
- self.ship= Ship(self)
- self.bullets = pygame.sprite.Group()
- self.aliens = pygame.sprite.Group()
- self._create_fleet()
- def run_game(self):
- """开始游戏的主循环"""
- while True:
- # 监视键盘和鼠标事件。
- self._check_events()
- self.ship.update()
- self._update_bullets()
- self._update_aliens()
- self._update_screen()
- def _check_events(self):
- """响应按键和鼠标事件"""
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- elif event.type == pygame.KEYDOWN:
- self._check_keydown_events(event)
-
- elif event.type == pygame.KEYUP:
- self._check_keyup_events(event)
- def _create_fleet(self):
- """创建外星人群"""
- #创建一个外星人群。
- #创建一个外星人并计算一行可容纳多少个外星人
- #外星人间距为外星人宽度
- alien = Alien(self)
- alien_width, alien_height = alien.rect.size
-
- available_space_x = self.settings.screen_width - (2*alien_width)
- number_aliens_x = available_space_x // (2* alien_width)
- #计算屏幕克容纳多少行外星人
- ship_height = self.ship.rect.height
- available_space_y = (self.settings.screen_height- (3 * alien_height) - ship_height)
- number_rows = available_space_y // (2 * alien_height)
- #创建外星人群
- for row_number in range(number_rows):
- for alien_number in range(number_aliens_x):
- self._create_alien(alien_number,row_number)
-
-
-
- def _fire_bullet(self):
- """创建一颗子弹,并将其加入编组bullets中。"""
- if len(self.bullets) < self.settings.bullets_allowed:
- new_bullet = Bullet(self)
- self.bullets.add(new_bullet)
- def _update_aliens(self):
- """更新外星人群中所有外星人的位置"""
- self._check_fleet_edges()
- self.aliens.update()
-
- def _update_screen(self):
- """更新屏幕上的图像,并切换到新屏幕"""
- self.screen.fill(self.bg_color)
- self.ship.blitme()
- for bullet in self.bullets.sprites():
- bullet.draw_bullet()
- self.aliens.draw(self.screen)
- pygame.display.flip()
- def _check_keydown_events(self, event):
- if event.key == pygame.K_RIGHT:
- self.ship.moving_right = True
- elif event.key == pygame.K_LEFT:
- self.ship.moving_left = True
- elif event.key == pygame.K_UP:
- self.ship.moving_up = True
- elif event.key == pygame.K_DOWN:
- self.ship.moving_down = True
- elif event.key == pygame.K_q:
- pygame.quit()
- sys.exit()
- elif event.key == pygame.K_SPACE:
- self._fire_bullet()
- def _check_keyup_events(self, event):
- if event.key == pygame.K_RIGHT:
- self.ship.moving_right = False
- elif event.key == pygame.K_LEFT:
- self.ship.moving_left = False
- elif event.key == pygame.K_UP:
- self.ship.moving_up = False
- elif event.key == pygame.K_DOWN:
- self.ship.moving_down = False
- def _update_bullets(self):
- """更新子弹的位置并删除消失的子弹"""
- self.bullets.update()
- #删除消失的子弹。
- for bullet in self.bullets.copy():
- if bullet.rect.bottom <=0:
- self.bullets.remove(bullet)
- print(len(self.bullets))
-
- def _create_alien(self, alien_number, row_number):
- """创建一个外星人并放在当前行"""
- alien = Alien(self)
- alien_width, alien_height = alien.rect.size
- alien.x = alien_width + 2*alien_width * alien_number
- alien.rect.x = alien.x
- alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
- self.aliens.add(alien)
- def _check_fleet_edges(self):
- """有外星人到达边缘采取相应的措施"""
- for alien in self.aliens.sprites():
- if alien.check_edges():
- self._change_fleet_direction()
- break
- def _change_fleet_direction(self):
- """将整群外星人下移,并改变它们的方向"""
- for alien in self.aliens.sprites():
- alien.rect.y += self.settings.fleet_drop_speed
- self.settings.fleet_direction *= -1
-
- if __name__ == '__main__':
- #创建游戏实例并运行游戏。
- ai = AlienInvasion()
- ai.run_game()
复制代码
第二个是案例的
- import sys
- import pygame
- from settings import Settings
- from ship import Ship
- from bullet import Bullet
- from alien import Alien
- class AlienInvasion:
- """Overall class to manage game assets and behavior."""
- def __init__(self):
- """Initialize the game, and create game resources."""
- pygame.init()
- self.settings = Settings()
- self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
- self.settings.screen_width = self.screen.get_rect().width
- self.settings.screen_height = self.screen.get_rect().height
- pygame.display.set_caption("Alien Invasion")
- self.ship = Ship(self)
- self.bullets = pygame.sprite.Group()
- self.aliens = pygame.sprite.Group()
- self._create_fleet()
- def run_game(self):
- """Start the main loop for the game."""
- while True:
- self._check_events()
- self.ship.update()
- self._update_bullets()
- self._update_aliens()
- self._update_screen()
- def _check_events(self):
- """Respond to keypresses and mouse events."""
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- sys.exit()
- elif event.type == pygame.KEYDOWN:
- self._check_keydown_events(event)
- elif event.type == pygame.KEYUP:
- self._check_keyup_events(event)
- def _check_keydown_events(self, event):
- """Respond to keypresses."""
- if event.key == pygame.K_RIGHT:
- self.ship.moving_right = True
- elif event.key == pygame.K_LEFT:
- self.ship.moving_left = True
- elif event.key == pygame.K_q:
- sys.exit()
- elif event.key == pygame.K_SPACE:
- self._fire_bullet()
- def _check_keyup_events(self, event):
- """Respond to key releases."""
- if event.key == pygame.K_RIGHT:
- self.ship.moving_right = False
- elif event.key == pygame.K_LEFT:
- self.ship.moving_left = False
- def _fire_bullet(self):
- """Create a new bullet and add it to the bullets group."""
- if len(self.bullets) < self.settings.bullets_allowed:
- new_bullet = Bullet(self)
- self.bullets.add(new_bullet)
- def _update_bullets(self):
- """Update position of bullets and get rid of old bullets."""
- # Update bullet positions.
- self.bullets.update()
- # Get rid of bullets that have disappeared.
- for bullet in self.bullets.copy():
- if bullet.rect.bottom <= 0:
- self.bullets.remove(bullet)
- def _update_aliens(self):
- """
- Check if the fleet is at an edge,
- then update the positions of all aliens in the fleet.
- """
- self._check_fleet_edges()
- self.aliens.update()
- def _create_fleet(self):
- """Create the fleet of aliens."""
- # Create an alien and find the number of aliens in a row.
- # Spacing between each alien is equal to one alien width.
- alien = Alien(self)
- alien_width, alien_height = alien.rect.size
- available_space_x = self.settings.screen_width - (2 * alien_width)
- number_aliens_x = available_space_x // (2 * alien_width)
-
- # Determine the number of rows of aliens that fit on the screen.
- ship_height = self.ship.rect.height
- available_space_y = (self.settings.screen_height -
- (3 * alien_height) - ship_height)
- number_rows = available_space_y // (2 * alien_height)
-
- # Create the full fleet of aliens.
- for row_number in range(number_rows):
- for alien_number in range(number_aliens_x):
- self._create_alien(alien_number, row_number)
- def _create_alien(self, alien_number, row_number):
- """Create an alien and place it in the row."""
- alien = Alien(self)
- alien_width, alien_height = alien.rect.size
- alien.x = alien_width + 2 * alien_width * alien_number
- alien.rect.x = alien.x
- alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
- self.aliens.add(alien)
- def _check_fleet_edges(self):
- """Respond appropriately if any aliens have reached an edge."""
- for alien in self.aliens.sprites():
- if alien.check_edges():
- self._change_fleet_direction()
- break
-
- def _change_fleet_direction(self):
- """Drop the entire fleet and change the fleet's direction."""
- for alien in self.aliens.sprites():
- alien.rect.y += self.settings.fleet_drop_speed
- self.settings.fleet_direction *= -1
- def _update_screen(self):
- """Update images on the screen, and flip to the new screen."""
- self.screen.fill(self.settings.bg_color)
- self.ship.blitme()
- for bullet in self.bullets.sprites():
- bullet.draw_bullet()
- self.aliens.draw(self.screen)
- pygame.display.flip()
- if __name__ == '__main__':
- # Make a game instance, and run the game.
- ai = AlienInvasion()
- ai.run_game()
复制代码 |
|