def __init__(self): """Initaialize the game""" pygame.init() self.settings = Settings() #Screen windows mode self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption('Alien Invasion') #Create an instaance to store game statistics # and create scoreboard self.stats = GameStats(self) self.sb = Scoreboard(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() #Look for aliens-ship collisions self._create_fleet() #Make play button self.play_button = Button(self, "Play")
def run_game(): pygame.init() #实例化一个Settings对象,对象名为ai_settings ai_settings = Settings() #set_mode()返回的surface表示整个游戏窗口 screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion ding") #创建一艘飞船 ship = Ship(ai_settings,screen) #创建一个用于存储子弹的编组 bullets = Group() #创建一个外星人编组 aliens = Group() #创建外星人群 gf.create_fleet(ai_settings,screen,ship,aliens) #创建一个用于统计游戏信息的实例 stats = GameStats(ai_settings) #创建积分牌 sb = Scoreboard(ai_settings,screen,stats) #创建play按钮 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,stats,sb,ship,aliens,bullets) gf.update_aliens(ai_settings,stats,screen,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按钮 play_button = Button(ai_settings, screen, "PLAY") # 创建一个用于存储游戏统计信息的实例并创建记分牌 stats = GameStats(ai_settings) scoreboard = 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, play_button, ship, aliens, bullets, scoreboard) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, ship, aliens, bullets, stats, scoreboard) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets, scoreboard) gf.update_screen(ai_settings, screen, stats, ship, bullets, aliens, play_button, scoreboard)
def run_game(): pygame.init() new_setting = Settings_1() screen = pygame.display.set_mode((new_setting.screen_width, new_setting.screen_height)) pygame.display.set_caption("Alian Invasion") #创建一个play按钮 play_button = Button(new_setting,screen,"Play") #创建一个用于存储游戏统计信息的实例 stats = GameStats(new_setting) #创建存储游戏统计信息的实例,并创建记分牌 sb = Scoreboard(new_setting,screen,stats) #创建一艘飞船 ship = Ship(new_setting,screen) #创建一个用于存储子弹的编组 bullets = Group() #创建一个外星人 #alien = Alien(new_setting,screen) aliens = Group() gf.create_fleet(new_setting,screen,ship,aliens) #游戏主循环 while True: #监视键盘和鼠标事件 gf.check_events(new_setting,screen,stats,sb,play_button,ship,aliens,bullets) if stats.game_active: ship.update() gf.update_bullets(new_setting,screen,stats,sb,ship,aliens,bullets) gf.update_aliens(new_setting,stats,sb,screen,ship,aliens,bullets) #print(len(bullets)) 主句代码用于监测是否所有的子弹都被删除了 #让最近绘制的屏幕可见 gf.update_screen(new_setting,screen,stats,sb,ship,aliens,bullets,play_button)
def run_game(): #初始化pygame,设置和屏幕对象 pygame.init() ai_sett = AlienSett() screen = pygame.display.set_mode( (ai_sett.screen_width, ai_sett.screen_height)) pygame.display.set_caption("Press P to start") #创建Play按钮 play_button = Button(ai_sett, screen, "Play") #创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_sett) sb = Scoreboard(ai_sett, screen, stats) #创建一艘飞船、一个子弹编组和一个外星人编组 ship = Ship(screen, ai_sett) bullets = Group() aliens = Group() # 创建外星人群 gf.create_fleet(ai_sett,screen,ship,aliens) #开始游戏主循环 while True: #监视键盘和鼠标事件 gf.check_events(ai_sett, screen, stats, play_button, ship, aliens, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_sett, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_sett, screen, stats, ship, aliens ,bullets) gf.update_screen(ai_sett, 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 War") play_button = Button(ai_settings, screen, "Play") stats = GameStats(ai_settings) sb = ScoreBoard(ai_settings, screen, stats) ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() f.create_fleet(ai_settings, screen, ship, aliens) # Назначение цвета фона bg_color = (100, 100, 100) alien = Alien(ai_settings, screen) while True: f.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: ship.update() f.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) f.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) f.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
class AlienInvasion(object): """Overall class to manage game AlienInvasion""" def __init__(self): """Initaialize the game""" pygame.init() self.settings = Settings() #Screen windows mode self.screen = pygame.display.set_mode( (self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption('Alien Invasion') #Create instance to store game statistics self.stats = GameStats(self) self.ship = Ship(self) self.bullets = pygame.sprite.Group() self.aliens = pygame.sprite.Group() #Look for aliens-ship collisions self._create_fleet() #Make play button self.play_button = Button(self, "Play") def _create_fleet(self): """Create the fleet of aliens""" #create an alien and find the number of aliens ina 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)) - 2 #create the full flet 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_width = alien.rect.width 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 appropiately if anyaliens 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 direction""" for alien in self.aliens.sprites(): alien.rect.y += self.settings.fleet_droop_speed self.settings.fleet_direction *= -1 def run_game(self): """Start main game loop""" while True: self._check_events() if self.stats.game_active: self.ship.update() self._update_bullets() self._update_aliens() self._update_screen() def _update_bullets(self): """Update position of bullets and get tid of the old ones""" #Update bullet possitions self.bullets.update() #Get rid of old bullets 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): """Respond t bullet-alien colisions""" #Check forany bullets that have hit aliens #if so get hit of the bullet and the alien collisions = pygame.sprite.groupcollide(self.bullets, self.aliens, False, True) if not self.aliens: #Destroy existing bullets and create new fleet self.bullets.empty() self._create_fleet() def _check_events(self): """Respond for keypress""" 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_keydown_events(self, event): """Respond for key presses""" 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_SPACE: self._fire_bullet() elif event.key == pygame.K_p: self._start_game() #WASD keyborad to play elif event.key == pygame.K_d: self.ship.moving_right = True elif event.key == pygame.K_a: self.ship.moving_left = True elif event.key == pygame.K_w: self.ship.moving_up = True elif event.key == pygame.K_s: self.ship.moving_down = True elif event.key == pygame.K_q: sys.exit() def _check_keyup_events(self, event): """Respond for key releases""" if event.key == pygame.K_RIGHT: self.ship.moving_right = False if event.key == pygame.K_LEFT: self.ship.moving_left = False if event.key == pygame.K_UP: self.ship.moving_up = False if event.key == pygame.K_DOWN: self.ship.moving_down = False #WASD cursor if event.key == pygame.K_d: self.ship.moving_right = False if event.key == pygame.K_a: self.ship.moving_left = False if event.key == pygame.K_w: self.ship.moving_up = False if event.key == pygame.K_s: self.ship.moving_down = False def _fire_bullet(self): """Create a new bullet and add it to the group""" if len(self.bullets) < self.settings.bullets_allowed: new_bullet = Bullet(self) self.bullets.add(new_bullet) 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 play button if the game is incative if not self.stats.game_active: self.play_button.draw_button() pygame.display.flip() 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() #Look for alien ship colisions if pygame.sprite.spritecollideany(self.ship, self.aliens): self._ship_hit() #Look for aliens hitting the bottom of screen self._check_aliens_bottom() def _ship_hit(self): """Respond to the ship beinghit by an alien""" if self.stats.ships_left > 0: #Decrement ships left self.stats.ships_left -= 1 #get rid of any remaining aliensand bulets self.aliens.empty() self.bullets.empty() #create a new fleet and center ship self.ship.center_ship() self._create_fleet() #Pause sleep(1) else: self.stats.game_active = False pygame.mouse.set_visible(True) def _check_aliens_bottom(self): """Check if any aliens 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 the ship got hit self._ship_hit() break 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._start_game() def _start_game(self): # Reset the game statistics. self.stats.reset_stats() self.stats.game_active = True # Hide the mouse cursor. pygame.mouse.set_visible(False) #Getrid of any remaning aliens and bullets self.aliens.empty() self.bullets.empty() #Create a new fleet. self._create_fleet() self.ship.center_ship()