def run_game(self): # 3 """Replaces the original run_game(), so we can interject our own controls. """ # Start out in an active state. self.ai_game.stats.game_active = True # 4 pygame.mouse.set_visible(False) # Speed up the game for development work. self.modify_speed(5) # Get the full fleet size. self.fleet_size = len(self.ai_game.aliens) # Start the main loop for the game. while True: # 5 # Still call ai_game._check_events(), so we can use keyboard to # quit. gf.check_events(ai_game.ai_settings, ai_game.screen, ai_game.stats, ai_game.sb, ai_game.play_button, ai_game.ship, ai_game.aliens, ai_game.bullets) self.implement_strategy() if self.ai_game.stats.game_active: self.ai_game.ship.update() gf.update_bullets(ai_game.ai_settings, ai_game.screen, ai_game.stats, ai_game.sb, ai_game.ship, ai_game.aliens, ai_game.bullets) gf.update_aliens(ai_game.ai_settings, ai_game.screen, ai_game.stats, ai_game.sb, ai_game.ship, ai_game.aliens, ai_game.bullets) gf.fire_bullet(ai_game.ai_settings, ai_game.screen, ai_game.ship, ai_game.bullets) gf.update_screen(ai_game.ai_settings, ai_game.screen, ai_game.stats, ai_game.sb, ai_game.ship, ai_game.aliens, ai_game.bullets,ai_game.play_button)
def implement_strategy(self): """Implement an automated strategy for playing the game.""" # Sweep right and left until half the fleet is destroyed, then stop. if len(self.ai_game.aliens) >= 0.5 * self.fleet_size: self.sweep_right_left() else: self.ai_game.ship.moving_right = False self.ai_game.ship.moving_left = False # Get specific alien to chase. if self.ai_game.aliens.sprites(): target_alien = self.get_target_alien() # 1 # Move toward target alien. ship = self.ai_game.ship if ship.rect.x < target_alien.rect.x: # 2 ship.moving_right = True ship.moving_left = False elif ship.rect.x > target_alien.rect.x: ship.moving_right = False ship.moving_left = True # Fire a bullet at the given frequency, whenever possible. firing_frequency = 1.0 # 2 if random() < firing_frequency: gf.fire_bullet(ai_game.ai_settings, ai_game.screen, ai_game.ship, ai_game.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) bullets = Group() ebullets = Group() aliens = Group() pygame.display.set_caption("打人啦") #game loop gf.init_alien(ai_settings, screen, aliens) while True: gf.ai_move(ship, aliens, ebullets, screen, ai_settings) gf.check_events(ship) ship.update() if ship.fire: gf.fire_bullet(ai_settings, screen, ship, bullets) ship.fire = False bullets.update() ebullets.update() gf.update_aliens(aliens) gf.update_bullets(bullets) gf.update_ebullets(ebullets, ai_settings) gf.check_kill(screen, bullets, aliens, ai_settings, ebullets) gf.check_bekill(ebullets, ship, ai_settings) gf.update_screen(ai_settings, screen, ship, bullets, aliens, ebullets)
def check_keydown_events(event, ai_settings, screen, ship, bullets): """Respond to keystroke""" if event.key == pygame.K_RIGHT: ship.moving_right = True elif event.key == pygame.K_LEFT: ship.moving_left = True elif event.key == pygame.K_SPACE: gf.fire_bullet(ai_settings, screen, ship, bullets)
def run_game(): # initialize game and create a screen object. # initialize game pygame.init() # create game display with 1200 pixels wide and 800 pixels in height ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # create an instance to store game stats filename = 'high_score.txt' stats = GameStats(ai_settings, filename) ship = Ship(screen, ai_settings) bullets = Group() aliens = Group() rewards = Group() missiles = Group() shields = Group() # create a play button msg1 = 'Press "P" to Play' msg2 = 'Press "Q" to Quit' play_button = Button(screen, ai_settings, msg1, msg2) score_board = ScoreBoard(screen, ai_settings, stats) # create an alient fleet gf.create_alien_fleet(screen, ai_settings, aliens, ship, stats) # The main loop of the game while True: gf.check_events(ai_settings, screen, ship, bullets, play_button, stats, aliens, score_board, filename, rewards, missiles) if stats.game_active: ship.update() gf.fire_bullet(ai_settings, screen, ship, bullets) gf.update_bullets(screen, ai_settings, aliens, ship, bullets, stats, score_board, rewards, missiles) gf.update_aliens(stats, aliens, bullets, ship, screen, ai_settings, score_board, rewards, missiles, shields) gf.update_rewards(ship, rewards, ai_settings, stats, score_board, shields, screen) gf.update_missiles(stats, aliens, bullets, ship, screen, ai_settings, score_board, rewards, missiles, shields) gf.update_shields(shields, missiles, ai_settings, aliens) gf.update_screen(ai_settings, screen, ship, bullets, aliens, play_button, stats, score_board, rewards, missiles, shields)
def run_game(): # initialize game and create a screen object. # initialize game pygame.init() # create game display ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Flying Piggy") # create an instance to store game stats filename = 'high_round.txt' stats = GameStats(ai_settings, filename) piggy = Piggy(screen, ai_settings) bullets = Group() rocks = Group() rock_stats = RockStats() rewards = Group() shields = Group() score_board = ScoreBoard(screen, ai_settings, stats) gf.create_initial_rocks(screen, ai_settings, rock_stats, rocks) # The main loop of the game while True: gf.check_events(stats, piggy, rocks, bullets, screen, ai_settings, rock_stats, shields, rewards, score_board, filename) if stats.game_active: piggy.update() gf.fire_bullet(ai_settings, screen, piggy, bullets) gf.update_bullets(screen, ai_settings, rocks, bullets, rewards, stats, score_board) gf.update_rocks(screen, ai_settings, rock_stats, rocks, piggy, stats, score_board) gf.update_rewards(shields, screen, ai_settings, piggy, rewards, score_board) gf.update_shields(shields, ai_settings, rocks) gf.check_round(stats, score_board, ai_settings) # create a play button if stats.piggy_hit: msg1 = "Game Over" else: msg1 = 'Round ' + str(stats.round) msg2 = 'Press "P" to Play' play_button = Button(screen, ai_settings, msg1, msg2) gf.update_screen(ai_settings, screen, piggy, bullets, stats, play_button, rocks, rewards, shields, score_board)
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) # 创建记分牌 sb = Scoreboard(ai_settings, screen, stats) # 创建一艘飞船 ship = Ship(ai_settings, screen) # 创建一个用于存储子弹的编组 bullets = Group() # 创建一个外球人的编组 aliens = Group() # 创建外球人群 gf.create_fleet(ai_settings, screen, ship, aliens) # 创建背景 background = Background(ai_settings, screen) background2 = Background2(ai_settings, screen) # 开始游戏的主循环 should_shoot_time = datetime.datetime.now() true_now_time = datetime.datetime.now() one_second = datetime.timedelta(0, 0, 100000) while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) gf.update_background(background, screen) gf.update_background2(background2, screen) if stats.game_active: ship.update() if true_now_time > should_shoot_time: gf.fire_bullet(ai_settings, screen, ship, bullets) should_shoot_time = datetime.datetime.now() + one_second true_now_time = datetime.datetime.now() 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, background, background2)
def check_keydown_events(event, ai_settings, stats, screen, ship, bullets): if event.key == pygame.K_RIGHT: ship.moving_right = True elif event.key == pygame.K_LEFT: ship.moving_left = True elif event.key == pygame.K_UP: ship.moving_up = True elif event.key == pygame.K_DOWN: ship.moving_down = True elif event.key == pygame.K_SPACE: gf.fire_bullet(ai_settings, screen, ship, bullets) elif event.key == pygame.K_q: gf.save_and_exit(stats) elif event.key == pygame.K_n: stats.reset_stats()
def run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() ai_settings = Settings() # 创建一个1200 X 800 像素的窗口 screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # 设置窗口的标题 # 创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_settings) # 创建得分牌 sb = Scoreboard(ai_settings, screen, stats) # 创建Play按钮 play_button = Button(ai_settings, screen, "Play") # 创建一艘飞船 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, ship, aliens, bullets, play_button, sb) # 事件检查(检查玩家输入) if stats.game_active: ship.update() # 飞船位置更新 gf.fire_bullet(ai_settings, bullets, screen, ship) # 发射子弹 gf.update_bullets(ai_settings, screen, ship, bullets, aliens, sb, stats) # 子弹位置更新 gf.update_aliens(ai_settings, ship, aliens, stats, screen, bullets, sb) # 外星人位置更新 gf.update_screen(ai_settings, stats, screen, ship, bullets, aliens, play_button, sb) # 游戏窗口更新
def run_game(): # Initialize game and create a screen object pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # Make the Play button. play_button = Button(ai_settings, screen, "Play") # Create an instance to store game statistics. stats = GameStats(ai_settings) # Make a ship ship = Ship(ai_settings, screen) # Make a group to store bullets in. bullets = Group() # Make a group of aliens. aliens = Group() # Create the fleet of aliens. gf.create_fleet(ai_settings, screen, ship, aliens) intv = time.time() # Start the main loop for the game while True: # Watch for the keyboard and mouse events gf.check_events(ai_settings, screen, stats, play_button, ship, bullets) if time.time() - intv >= 1: enemy = random.choice(aliens.sprites()) gf.fire_bullet(ai_settings, screen, enemy, bullets, True) intv = time.time() 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 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") # 创建一艘飞船 ship = Ship(ai_settings, screen) # 创建一个外星人 alien = Alien(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) gf.fire_bullet(ai_settings, screen, ship, bullets) gf.update_bullets(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)) pygame.display.set_caption('Alien Invasion') #创建Play按钮 play_button = Button(ai_settings,screen,'Play') #创建一艘飞船 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) #开始游戏主循环 while True: #监听鼠标和键盘事件 gf.check_events(ai_settings,screen,ship,bullets,stats,play_button,aliens) if stats.game_active: # 控制飞船移动 gf.fire_bullet(ai_settings,screen,ship,bullets) #激光外挂 ship.update() bullets.update() #当对编组调用update()时,编组将自动对其中的每个精灵都调用update() gf.update_bullets(ai_settings,screen,ship,aliens,bullets,stats,sb) gf.update_aliens(ai_settings,stats,screen,ship,aliens,bullets) #更新屏幕上的图像,并切换到新屏幕 gf.update_screen(ai_settings,screen,ship,bullets,aliens,stats,play_button,sb)
def update(self, a_setting, screen, ship, aliens, bullets): if self.moving_right: if self.moving_right and self.rect.right < self.screen_rect.right: self.center += self.a_setting.ship_speed_factor if self.moving_left: if self.moving_left and self.rect.left > 0: self.center -= self.a_setting.ship_speed_factor if self.moving_up: if self.moving_up and self.rect.top > 0: self.rect.centery -= self.a_setting.ship_speed_factor if self.moving_down: if self.moving_down and self.rect.bottom < self.screen_rect.bottom: self.rect.centery += self.a_setting.ship_speed_factor if self.moving_bullet: #gf.fire_bullet(a_setting,screen,ship,bullets) #gf.bull(bullets) #gf.update_bullets(bullets) gf.fire_bullet(a_setting, screen, ship, bullets) gf.update_screen(a_setting, screen, ship, aliens, bullets) self.rect.centerx = self.center
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") # 创建一艘飞船 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, ship, bullets, stats, play_button, aliens, sb) if stats.game_active: # 更新飞船 ship.update() if ai_settings.is_const_shoot: gf.fire_bullet(ai_settings, screen, ship, bullets) gf.update_bullets(ai_settings, screen, ship, aliens, bullets, stats, sb) gf.update_aliens(ai_settings, aliens, ship, stats, screen, bullets, sb) #绘制屏幕 gf.update_screen(ai_settings, screen, ship, bullets, aliens, stats, play_button, sb)
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_button = Button(ai_settings, screen, "F**K") # 创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_settings) ship = Ship(ai_settings, screen) # stars=Star(ai_settings,screen) # 创建一个用于存储子弹的编组 bullets = Group() stars = Group() aliens = Group() # 创建外星人群 gf.create_fleet(ai_settings, stats, screen, ship, aliens) sb = Scoreboard(ai_settings, screen, stats) while True: gf.check_event(ai_settings, screen, stats, sb, play_button, ship, stars, aliens, bullets) if stats.game_active: ship.update() if ship.fire_bullets: gf.fire_bullet(ai_settings, screen, ship, bullets) gf.check_level(ai_settings, stats, screen, sb, ship, stars) gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, sb, ship, stars, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, stars, aliens, bullets, play_button)
def check_events(ai_settings, stats, sb, screen, ship, bullets, play_button): """Отслеживание событий клавиатуры и мыши""" if stats.game_active and stats.is_mouse_control: mouse_x, mouse_y = pygame.mouse.get_pos() move_ship_by_mouse(ai_settings, ship, mouse_x, mouse_y) for event in pygame.event.get(): if event.type == pygame.QUIT: gf.save_and_exit(stats) elif event.type == pygame.KEYDOWN: check_keydown_events(event, ai_settings, stats, screen, ship, bullets) elif event.type == pygame.KEYUP: check_keyup_events(event, ship) elif event.type == pygame.MOUSEBUTTONDOWN: if not stats.game_active: mouse_x, mouse_y = pygame.mouse.get_pos() check_play_button(ai_settings, screen, stats, sb, play_button, mouse_x, mouse_y) else: gf.fire_bullet(ai_settings, screen, ship, bullets) stats.is_mouse_control = True pygame.mouse.set_visible(False)
def run_game(marker_img): # Initialize pygame, settings, and screen object. global onTracking pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("基于SIFT和KCF的运动目标匹配与跟踪:人机交互游戏《外星人入侵》") cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # hog, fixed_window, multiscale tracker = my_kcf.KCF(True, True, True) target = cv2.imdecode(np.fromfile(marker_img, dtype=np.uint8), cv2.IMREAD_GRAYSCALE) first_ret, first_frame = cap.read() init_rect = find_target(target, first_frame) ix = init_rect[0][0] iy = init_rect[0][1] w = init_rect[3][0] - init_rect[0][0] h = init_rect[1][1] - init_rect[0][1] initTracking = True # Make the Play button. play_button = Button(ai_settings, screen, "Play") # Create an instance to store game statistics, and a scoreboard. stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # Make a ship, a group of bullets, and a group of aliens. ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() # Create the fleet of aliens. gf.create_fleet(ai_settings, screen, ship, aliens) ship_x = int(ai_settings.screen_width / 2) # Start the main loop for the game. while cap.isOpened(): ret, frame = cap.read() if not ret: break if initTracking: # 在鼠标事件里定义的全局变量,为true代表新选好了框 cv2.rectangle(frame, (ix, iy), (ix + w, iy + h), (0, 255, 255), 2) tracker.init([ix, iy, w, h], frame) initTracking = False onTracking = True elif onTracking: # 为true代表没有新选框,在跟踪原来的 boundingbox = tracker.update(frame) boundingbox = list(map(int, boundingbox)) # boundingbox变成了一个列表,内容为x,y,w,h print(boundingbox) cv2.rectangle(frame, (boundingbox[0], boundingbox[1]), (boundingbox[0] + boundingbox[2], boundingbox[1] + boundingbox[3]), (0, 255, 255), 1) ship_x = int(boundingbox[0] + boundingbox[2] / 2) cv2.imshow( 'Webcam', cv2.resize(frame, (480, 300), interpolation=cv2.INTER_CUBIC)) quit = gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if quit: break if stats.game_active: ship.update(ship_x) gf.fire_bullet(ai_settings, screen, ship, bullets) 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) cap.release() cv2.destroyAllWindows() pygame.quit()
def run_game(): pygame.init() pygame.mixer.init() bs = pygame.mixer.Sound('data/l.ogg') ad = pygame.mixer.Sound('data/al.ogg') ded = pygame.mixer.Sound('data/ded.ogg') theme = pygame.mixer.Sound('data/theme.ogg') click = pygame.mixer.Sound('data/click.ogg') go = pygame.mixer.Sound('data/Game_over.ogg') power = pygame.mixer.Sound('data/power.ogg') power.set_volume(1) theme.set_volume(0.2) theme.play(-1) go.set_volume(1) bs.set_volume(0.1) ad.set_volume(0.1) ded.set_volume(0.2) ai_s = Settings() black = (0, 0, 0) green = (0, 200, 0) screen = pygame.display.set_mode((ai_s.scr_w, ai_s.scr_h)) pygame.display.set_caption("Alien Invasion") play = Button(ai_s, screen, 'Play', 200, 40, 0, -50, green, black, 48) infos = Button(ai_s, screen, 'Info', 200, 40, 0, 50, green, black, 48) back = Button(ai_s, screen, '<-', 40, 40, 600, -330, green, black, 48) buttons = [play, infos, back] down = Button(ai_s, screen, '..more', 200, 40, 300, 300, green, black, 40) title = Button(ai_s, screen, 'ALIEN INVASION', 600, 200, 0, -(ai_s.scr_h / 2) + 150, black, green, 120) game_o = Button(ai_s, screen, 'Game Over', 200, 40, 0, 0, black, green, 60) info = Info_Screen(screen) info2 = Info_Screen2(screen) stats = GameStats(ai_s) sb = Scoreboard(ai_s, screen, stats) ship = Ship(ai_s, screen) alien = Alien(ai_s, screen) bullets = Group() aliens = Group() gf.create_fleet(ai_s, screen, ship, aliens) po = Powers(screen) a_bullets = Group() while True: pygame.time.delay(15) if not stats.game_active: mf.check_events(stats, buttons, info, click, down, info2) mf.update_screen(ai_s, screen, buttons, info, title, down, info2) if stats.game_active: if sb.power_status: sb.count_down(power) gf.check_events(ship) gf.fire_bullet(ai_s, screen, ship, bullets, bs, sb) gf.alien_bullet(ai_s, screen, aliens, a_bullets, sb, stats) gf.update_a_bullets(ai_s, stats, screen, sb, ship, aliens, bullets, ded, go, game_o, power, a_bullets) ship.update() gf.update_bullets(ai_s, screen, stats, sb, ship, aliens, bullets, ad, po) gf.update_aliens(ai_s, stats, screen, sb, ship, aliens, bullets, ded, go, game_o, power, a_bullets) if po.status == True: gf.update_po(po, ship, sb, power) gf.update_screen(ai_s, screen, stats, sb, ship, aliens, bullets, po, a_bullets)
def run_game(): pygame.init() pygame.mixer.init() bs = pygame.mixer.Sound('data/laser.wav') ad = pygame.mixer.Sound('data/al.ogg') dead = pygame.mixer.Sound('data/dead.wav') theme = pygame.mixer.Sound('data/background.wav') click = pygame.mixer.Sound('data/click.ogg') go = pygame.mixer.Sound('data/Game_over.ogg') power = pygame.mixer.Sound('data/power.wav') power.set_volume(0.8) theme.set_volume(0.1) theme.play(-1) go.set_volume(2) bs.set_volume(0.6) ad.set_volume(0.2) dead.set_volume(0.5) ai_s = Settings() black = (0, 0, 0) blue1 = (30, 230, 230) blue2 = (47, 150, 150) screen = pygame.display.set_mode((ai_s.scr_w, ai_s.scr_h)) background = pygame.image.load('data/background.png') pygame.display.set_caption("Alien Invasion") icon = pygame.image.load('data/spaceship.png') pygame.display.set_icon(icon) #Button(ai_s,screen,msg,width,height,x,y,rect_color,text_color,font_size) play = Button(ai_s, screen, 'Play', 200, 40, 0, -50, blue1, black, 48) infos = Button(ai_s, screen, 'Info', 200, 40, 0, 50, blue1, black, 48) back = Button(ai_s, screen, '<', 40, 40, 600, -330, blue1, black, 48) buttons = [play, infos, back] down = Button(ai_s, screen, 'Bonus', 200, 40, 300, 300, blue1, black, 40) title = Button(ai_s, screen, 'ALIEN INVASION', 0, 0, 0, -(ai_s.scr_h / 2) + 150, 0, blue1, 120) game_o = Button(ai_s, screen, 'Game Over', 0, 0, 0, 0, 0, blue1, 120) info = Info_Screen(screen) info2 = Info_Screen2(screen) stats = GameStats(ai_s) sb = Scoreboard(ai_s, screen, stats) ship = Ship(ai_s, screen) alien = Alien(ai_s, screen) bullets = Group() aliens = Group() gf.create_fleet(ai_s, screen, ship, aliens) po = Powers(screen) a_bullets = Group() while True: pygame.time.delay(15) screen.blit(background, (0, 0)) if not stats.game_active: mf.check_events(stats, buttons, info, click, down, info2) mf.update_screen(ai_s, screen, buttons, info, title, down, info2) if stats.game_active: if sb.power_status: sb.count_down(power) gf.check_events(ship) gf.fire_bullet(ai_s, screen, ship, bullets, bs, sb) gf.alien_bullet(ai_s, screen, aliens, a_bullets, sb, stats) gf.update_a_bullets(ai_s, stats, screen, sb, ship, aliens, bullets, dead, go, game_o, power, a_bullets) ship.update() gf.update_bullets(ai_s, screen, stats, sb, ship, aliens, bullets, ad, po) gf.update_aliens(ai_s, stats, screen, sb, ship, aliens, bullets, dead, go, game_o, power, a_bullets) if po.status == True: gf.update_po(po, ship, sb, power) gf.update_screen(ai_s, screen, stats, sb, ship, aliens, bullets, po, a_bullets)
def run_game(): ''' Функция сoздает игрoвые oбъекты, настраивает их и запускает игрoвoй цикл. ''' # Инициализирует игру. pygame.init() # Инициализируем oбъект класса Settings, хранящий настрoйки игры. ai_settings = settings.Settings() # Инициализирует пoверхнoсть для oтрисoвки кадрoв. icon = pygame.image.load('images/icon.png') pygame.display.set_icon(icon) screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") ''' Сoздаем игрoвые oбъекты. ''' # Cоздаем экземпляр игровой статистики. stats = GameStats(ai_settings) # Cоздаем корабль. ship = Ship(ai_settings, screen) # Сoздаем группу для хранения всех пуль. bullets = Group() # Группа для хранения пришельцев. aliens = Group() # Cоздание флота пришельцев. gf.create_fleet(ai_settings, screen, ship, aliens) # Создание корабля. # Группа для хранения фонoвых oбъектoв. backgrounds = Group() # Сoздаем начальный фoн, кoтoрый затем запустит самooрганизацию фoна. start_bg1 = Background(ai_settings, screen, -ai_settings.bg_speed) # Дoбавляем егo в группу фoнoв. backgrounds.add(start_bg1) # Загружаем изoбражения для анимирoваннoгo спрайта. images = [] for i in range(0, 4): text = 'images/fire/{0}.png'.format(i) images.append(pygame.image.load(text)) # Загружаем изoбражения для взрыва. images_explosion = [] for i in range(0, 13): text = 'images/explosion/{0}.png'.format(i) images_explosion.append(pygame.image.load(text)) # Группа для хранения VFX. vfxs = Group() # Группа для взрывoв. exps = Group() # Сoздаем VFX-oбъекты и дoбавляем их в группу. for x in ship.fire_x: new_vfx = FireFX(screen, images, 4, x, (ship.rect.top + 1)) vfxs.add(new_vfx) # Создаю часы для фиксации FPS. clock = pygame.time.Clock() # Сoздание кнoпки 'Play'. play_button = Button(ai_settings, screen, 'Play') ''' Запуск oснoвнoгo цикла игры. ''' while True: # Фиксирую FPS игры. clock.tick(120) # Прoверка действий игрoка и реакция на них. gf.check_events(ai_settings, stats, screen, play_button, ship, aliens, bullets, exps) ''' Части игры, которые выполняются лишь при game_active = True. ''' if stats.game_active == True: # Расчеты для прoрисoвки нoвoгo кадра. gf.update_bg(backgrounds, ai_settings, screen) ship.update() # пули рисуются на фoне, нo пoд кoраблем gf.fire_cooldown(ship) gf.fire_bullet(ai_settings, screen, ship, bullets, vfxs) gf.update_bullets(ai_settings, screen, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) gf.check_bullet_alien_collisions(ai_settings, ship, bullets, aliens, screen, images_explosion, 4, exps) # Расчеты для эффектoв oгня. gf.update_count_frames(vfxs) gf.update_indeces(vfxs) gf.update_frames(vfxs, ship) # Расчеты для взрывoв. gf.update_lifetimes(exps) gf.delete_exps(exps) gf.update_count_frames(exps) gf.update_indeces(exps) gf.update_frames_exps(exps) ''' Прорисовка нового кадра. ''' gf.update_screen(ai_settings, stats, screen, ship, aliens, bullets, backgrounds, vfxs, exps, play_button)
def run_game(): # initialize game and create a screen object. pygame.init() # make an instance of the class Settings ai_settings= Settings() screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("corona virus pandemic") # lets create an instance to stor game statistics and create a scoreboard stats = Gamestats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # make a ship ship = Ship(ai_settings, screen) # make a group to store the bullets in # bullets an instance of the class Group. created outside the loop to avoid repetition bullets = Group() # make a group of ufos startreks = Group() # create the fleet of startreks gf.create_fleet(ai_settings, screen, ship, startreks) # make an instance of a ufo startrek= Ufo(ai_settings, screen) # start the mainloop for the game. # lets create an instance of gameover gameover = Gameover(screen) # creatign an instance of the class button for the play button play_button = Button(ai_settings, screen, "Play", 0 , 0) # creating a restart button restart_button = Button(ai_settings, screen, "Restart", 800, 0) # gameover button to be displayed when the player runs out ships gameover_button = Button(ai_settings, screen, "Gameover", 200, 0) class Backround(pygame.sprite.Sprite): """a Background class for the background image of the game""" def __init__(self, image_file, location): # call the sprite initializer pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(image_file) self.rect = self.image.get_rect() self.rect.left, self.rect.top = location background = Backround('images/background.bmp', [0,0]) screen.fill([255, 255, 255]) screen.blit(background.image, background.rect) # boolean for quiting the game and setting the while loop to true running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() if event.key == pygame.K_RIGHT: ship.moving_right = True if event.key == pygame.K_LEFT: ship.moving_left = True if event.key == pygame.K_SPACE: gf.fire_bullet(ai_settings, screen, ship, bullets) if event.key == pygame.K_p and K_BACKSPACE: gf.p_keyboardplay(ai_settings, screen, stats, ship, startreks, bullets) # if event.key== pygame.K_BACKSPACE: # sleep(2) elif event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: ship.moving_right = False if event.key == pygame.K_LEFT: ship.moving_left = False elif event.type == pygame.MOUSEBUTTONDOWN: mouse_x, mouse_y = pygame.mouse.get_pos() gf.check_play_button(ai_settings, screen, stats,sb, play_button,ship, startreks, bullets, mouse_x, mouse_y) gf.check_restart_button(ai_settings, screen, stats, restart_button, ship, startreks, bullets, mouse_x, mouse_y) # keyboard and mouse events # gf.check_events(ai_settings ,screen,ship, bullets) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, startreks, bullets) gf.update_startreks(ai_settings,stats, screen, ship, startreks, bullets) gf.update_screen(ai_settings,screen,stats,sb ,ship, startreks, bullets, play_button, restart_button, gameover_button)