def __init__(self): pygame.init() self.settings = Settings() self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption("Alien Invasion") self.stats = GameStates(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() self._create_fleet() self.play_button = Button(self, "Play")
def run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() #引用Settings类 ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #创建一个用于存储游戏统计信息的实例 stats = GameStates(ai_settings) #创建一艘飞船,一个子弹编组和一个外星人编组 ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) # 开始游戏的主循环 while True: #监视键盘和鼠标事件 gf.check_events(ai_settings, screen, ship, bullets) if stats.game_active: ship.update() #bullets.update() gf.update_bullets(ai_settings, screen, ship, aliens, bullets) #在终端打印当前屏幕存在的子弹数量 #print(len(bullets)) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) gf.update_screen(ai_settings, screen, ship, aliens, bullets)
def run_game(): #初始化屏幕并且创建一个屏幕对象 pygame.init() #初始化 ai_settings = Setting() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) #创建了一个屏幕对象screen设置屏幕大小 bg_color = (ai_settings.screen_color) #设置背景颜色 pygame.display.set_caption("Super_ship") #设置屏幕框显示的文字 ship = Ship(ai_settings, screen) #创建一艘飞船,不可以放在while循环中 ship_height = ship.rect.height bullets = Group() aliens = Group() gf.creat_fleet(ai_settings, screen, aliens, ship_height) stats = GameStates(ai_settings) ship_limit = stats.ai_settings.ship_limit #开始游戏的主循环 while True: #每经过一次循环就刷新一下屏幕 #监视键盘和鼠标事件 gf.check_events(ai_settings, screen, ship, bullets) ship.update() gf.update_aliens(ai_settings, aliens, ship, bullets, stats, screen, ship_height) gf.update_bullets(ai_settings, screen, ship, bullets, aliens, ship_height) gf.update_screen( ai_settings, screen, ship, bullets, aliens) #每次循环都会重新绘制屏幕 #必须先进行填充背景色#将飞船放置在底端中间#让最近绘制的屏幕可见
def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() '''load game settings''' ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption(ai_settings.caption) '''create a ship''' ship = Ship(ai_settings, screen) '''init a allien group''' aliens = Group() gf.create_fleet(ai_settings, screen, ship, aliens) '''create a group to store all bullets''' bullets = Group() #init a stats object stats = GameStates(ai_settings) #开始游戏的主循环 while True: #监视键盘和鼠标事件 gf.check_events(ai_settings, screen, ship, bullets) if stats.game_active: gf.update_ship(ship) gf.update_bullets(ai_settings, screen, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) print(len(bullets)) gf.update_screen(ai_settings, screen, ship, aliens, bullets)
def run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) ship = Ship(ai_settings, screen) pygame.display.set_caption("Alien Invasion") stats = GameStates(ai_settings) # 创建一个用于存储子弹的编组 bullets = Group() aliens = Group() gf.create_fleet(ai_settings, screen, aliens, ship) play_button = Button(screen, "Play!") scoreboard = Scoreboard(screen, stats, ai_settings) # 开始游戏的主循环 while True: # 监视键盘和鼠标事件 gf.check_events(scoreboard, ai_settings, screen, ship, bullets, play_button, stats, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(stats, scoreboard, ai_settings, bullets, aliens, screen, ship) gf.update_aliens(scoreboard, ai_settings, ship, aliens, stats, bullets, screen) gf.update_screen(ai_settings, screen, ship, aliens, bullets, play_button, stats, scoreboard)
def run_game(): pygame.init() ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # 创建Play按钮 play_button = Button(ai_settings, screen, "Play") # 创建一个用于存储游戏统计信息的实例,并创建计分牌 stats = GameStates(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # 创建一搜飞船 ship = Ship(ai_settings, screen) # 创建一个用于存储子弹的编组 bullets = Group() # 创建外星人编组 aliens = Group() # 创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) # 开始游戏循环主体 while True: # 监视键盘和鼠标事件 gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) ship = Ship(ai_settings, screen) alien = Alien(ai_settings, screen) #创建一个用于存储子弹的编组 bullets = Group() aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) #创建用于存储游戏统计信息的实例 stats = GameStates(ai_settings) #创建游戏开始的按钮 play_button = Button(ai_settings, screen, "Play") #游戏主循环 while True: gf.check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) #每次循环都重绘屏幕 gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button)
def __init__(self): #Initialize the game, and create game resorces pygame.init() self.settings = Settings() #create screen self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption("Alien Invasion") #Create an instance to store game statistics, and create a scoreboard. self.stats = GameStates(self) self.sb = Scoreboard(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() self._create_fleet() #Make the Play button self.play_button = Button(self, "Play")
def run_game(): #初始化游戏并创建一个游戏对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #创建Play按钮 play_button = Button(ai_settings, screen, "Play") #创建一个用于存储游戏统计信息的实例 stats = GameStates(ai_settings) sb = Scoreboard(ai_settings, screen, stats) #创建一艘飞船 ship = Ship(ai_settings, screen) #创造一个用于存储子弹的编组 bullets = Group() aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) bg_color = (230, 230, 230) #alien = Alien(ai_settings,screen) #开始游戏的主循环 while True: #监视键盘和鼠标事件 gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.ship_left > 0: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_alien(ai_settings, screen, stats, sb, ship, aliens, bullets) #print(len(bullets)) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button) #让最近绘制的屏幕可见 pygame.display.flip()
def run_game(): """Initialise game and create an object of the game""" pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_height, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # Make a ship ship = Ship(ai_settings, screen) # Storing bullet as groups bullets = Group() # Make an alien alien = Alien(ai_settings, screen) # Storing alien as groups aliens = Group() # creating fleets gf.create_fleet(ai_settings, screen, ship, aliens) # Make gaming instances and score instances stats = GameStates(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # Make a play button play_button = Button(ai_settings, screen, "Play") # Start the main loop for the program while True: # using the check_events module from game_functions.py gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
def run_game(): #初始化pygame、设置和屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #创建play按钮 play_button = Button(ai_settings, screen, 'Play') #创建一个用于存储游戏统计信息的实例,并创建计分牌 stats = GameStates(ai_settings) sb = Scoreboard(ai_settings, screen, stats) #创建一艘飞船、一个子弹编组、一个外星人编组 ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) #开始游戏的主循环 while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
def run_game(): pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") play_button = Button(ai_settings, screen, "Play") stats = GameStates(ai_settings) sb = Scoreboard(ai_settings, screen, stats) ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() gf.create_fleet(ai_settings, screen, ship, aliens) while True: gf.check_events(ai_settings, stats, screen, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, stats, sb, screen, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) gf.update_screen(ai_settings, stats, sb, screen, ship, aliens, bullets, play_button)
class AlienInvasion: #Overall class to manage game assets and behavior def __init__(self): #Initialize the game, and create game resorces pygame.init() self.settings = Settings() #create screen self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption("Alien Invasion") #Create an instance to store game statistics, and create a scoreboard. self.stats = GameStates(self) self.sb = Scoreboard(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() self._create_fleet() #Make the Play button self.play_button = Button(self, "Play") def run_game(self): #Start the main loop for the game while True: self._check_events() if self.stats.game_active: self.ship.update() self._update_bullets() self._update_aliens() self._update_screen() def _check_events(self): #respond to keyresses adn 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) elif event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() self._check_play_button(mouse_pos) def _check_play_button(self, mouse_pos): #Start a new game when the player clicks Play button_clicked = self.play_button.rect.collidepoint(mouse_pos) if button_clicked and not self.stats.game_active: #Reset the game settings self.settings.initialize_dynamic_settings() #Reset the game statistics. self.stats.reset_stats() self.stats.game_active = True self.sb.prep_score() self.sb.prep_level() self.sb.prep_ships() #Get rid of any remaining aliems and bullets. self.aliens.empty() self.bullets.empty() #Create a new fleet and center the ship. self._create_fleet() self.ship.center_ship() #Hid the mouse cursor. pygame.mouse.set_visible(False) 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): 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 the bullets that have disappeared. for bullet in self.bullets.copy(): if bullet.rect.bottom <= 0: self.bullets.remove(bullet) self._check_bullet_alien_collisions() def _check_bullet_alien_collisions(self): #Remove any bullets and aliens that have collided collisions = pygame.sprite.groupcollide(self.bullets, self.aliens, True, True) if collisions: for aliens in collisions.values(): self.stats.score += self.settings.alien_points * len(aliens) self.sb.prep_score() self.sb.check_high_score() if not self.aliens: #Destroy existing bullets and create new fleet. self.bullets.empty() self._create_fleet() self.settings.increase_speed() #Increase levle self.stats.level += 1 self.sb.prep_level() 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) #Draw the score information. self.sb.show_score() #Draw the play button if the game is inactive. if not self.stats.game_active: self.play_button.draw_button() #Make the most recently drawn screen visible pygame.display.flip() def _create_fleet(self): #Create an alien and find teh number o f 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 _update_aliens(self): #Check if the fleet is at an edge, #the update teh positions of all aliens in the fleet. self._check_fleet_edges() self.aliens.update() #Look for alien-ship collisions. if pygame.sprite.spritecollideany(self.ship, self.aliens): self._ship_hit() #Look for aliens hitting the bottom of the screen. self._check_aliens_bottom() def _check_fleet_edges(self): #respend 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 diretion. for alien in self.aliens.sprites(): alien.rect.y += self.settings.fleet_drop_speed self.settings.fleet_direction *= -1 def _ship_hit(self): #Respond to the ship being hit by an alien. if self.stats.ships_left > 0: #Decrement ships_left self.stats.ships_left -= 1 self.sb.prep_ships() #Get rid of any remaining aliems and bullets. self.aliens.empty() self.bullets.empty() #Create a new fleet and center the ship self._create_fleet() self.ship.center_ship() #Pause sleep(0.5) else: self.stats.game_active = False pygame.mouse.set_visible(True) def _check_aliens_bottom(self): #Check is any aliens have reached the bottom of the screen. screen_rect = self.screen.get_rect() for alien in self.aliens.sprites(): if alien.rect.bottom >= screen_rect.bottom: #Treat this the same as if teh ship got hit. self._ship_hit() break
class AlienInvasion: """Alien Invasion Class""" def __init__(self): pygame.init() self.settings = Settings() self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption("Alien Invasion") self.stats = GameStates(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() self._create_fleet() self.play_button = Button(self, "Play") def run_game(self): """Run game""" while True: self._check_events() if self.stats.game_active: 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: sys.exit() elif event.type == pygame.KEYDOWN: self._check_keydown_events(event) elif event.type == pygame.KEYUP: self._check_keyup_events(event) elif event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() self._check_play_button(mouse_pos) def _check_play_button(self, mouse_pos): button_clicked = self.play_button.rect.collidepoint(mouse_pos) if button_clicked and not self.stats.game_active: self.stats.reset_stats() self.stats.game_active = True # Get rid of any remaining aliens and bullets self.aliens.empty() self.bullets.empty() # Create a new fleet and center the ship self._create_fleet() self.ship.center_ship() pygame.mouse.set_visible = False def _update_screen(self): self.screen.fill(self.settings.bg_color) self.ship.blitme() for bullet in self.bullets.sprites(): bullet.draw_bullet() self.aliens.draw(self.screen) if not self.stats.game_active: self.play_button.draw_button() 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_q: 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 def _fire_bullet(self): if len(self.bullets) < self.settings.bullets_allowed: new_bullet = Bullet(self) self.bullets.add(new_bullet) def _update_bullets(self): 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) self._check_bullet_alien_collisions() def _check_bullet_alien_collisions(self): # Check for any bullets that have hit aliens # If so, get rid of the bullet and the alien collisions = pygame.sprite.groupcollide(self.bullets, self.aliens, True, True) if collisions: pass if not self.aliens: # Destory existing bullets and create new fleet self.bullets.empty() self._create_fleet() def _create_fleet(self): # 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) # Crate 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): 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_height + 2 * alien_height * row_number self.aliens.add(alien) def _update_aliens(self): self._check_fleet_edges() self.aliens.update() # Look for alien-ship collisions if pygame.sprite.spritecollideany(self.ship, self.aliens): self._ship_hit() self._check_aliens_bottom() 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 def _ship_hit(self): if self.stats.ship_left > 0: self.stats.ship_left -= 1 self.aliens.empty() self.bullets.empty() self._create_fleet() self.ship.center_ship() sleep(0.5) else: self.stats.game_active = False pygame.mouse.set_visible = True def _check_aliens_bottom(self): screen_rect = self.screen.get_rect() for alien in self.aliens.sprites(): if alien.rect.bottom >= screen_rect.bottom: self._ship_hit() break