Example #1
0
class Formation:
  """
    Defines formation
  """
  
  def __init__(self):
    self.defence_line_ = Defence()
    self.midfield_line_ = Midfield()
    self.attack_line_ = Attack()
    
  def get(self):
    return {"defence": self.defence_line_, "midfield": self.midfield_line_, "attack": self.attack_line_}
    
  def get_slot_list(self):
    return self.defence_line_.slots() + self.midfield_line_.slots() + self.attack_line_.slots()

  def players_count(self):
    count = 0
    count += self.defence_line_.players_count()
    count += self.midfield_line_.players_count()
    count += self.attack_line_.players_count()
    return count
  
  def player_present(self, player):
    return self.defence_line_.player_present(player) or self.midfield_line_.player_present(player) or self.attack_line_.player_present(player)

  def __str__(self):
    stringa = "defence:  " + str(self.defence_line_)
    stringa += "\nmidfield:  " + str(self.midfield_line_)
    stringa += "\nattack:  " + str(self.attack_line_)
    return stringa

  @staticmethod
  def create_random_formation(schema, team):
    form = Formation()
    idx = 0
    line = schema[0]
    for i in range(0,line):
      slt = form.defence_line_.slots()[i]
      form.defence_line_.set_player(team[idx], slt, "neutral")
      idx += 1
    line = schema[1]
    for i in range(0,line):
      slt = form.midfield_line_.slots()[i]
      form.midfield_line_.set_player(team[idx], slt, "neutral")
      idx += 1
    line = schema[2]
    for i in range(0,line):
      slt = form.attack_line_.slots()[i]
      form.attack_line_.set_player(team[idx], slt, "neutral")
      idx += 1
    return form
Example #2
0
 def __init__(self):
   self.defence_line_ = Defence()
   self.midfield_line_ = Midfield()
   self.attack_line_ = Attack()
def main():
    global current_game_state

    # load high-score file
    high_scores = load_scores("scores.json")

    # set the random seed - produces more random trajectories
    random.seed()

    # start music
    if SOUND == True:
        background_track.play(-1)

    # list of all active explosions
    explosion_list = []
    # list of all active missiles
    missile_list = []
    # TBC - generate the cities
    # need to be replaced with working cities
    city_list = []
    for i in range(1, 8):  # 8 == Max num cities plus defence plus one
        if i == 8 // 2:  # find centre point for gun
            pass
        else:
            city_list.append(City(i, 7))  # 7 == max num cities plus guns
    # Intercepter gun
    defence = Defence()

    # set the game running
    current_game_state = GAME_STATE_RUNNING

    show_high_scores(screen, high_scores)

    # setup the AI director
    director = Director(1, high_scores["1"]["score"])

    while True:
        # write event handlers here
        for event in pygame.event.get():
            if event.type == MOUSEBUTTONDOWN:
                if event.button == 1:
                    # primary mouse button
                    defence.shoot(missile_list)
                if event.button == 2:
                    # middle mouse button
                    pass
                if event.button == 3:
                    # right mouse button
                    pass
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    exit_game(screen)
                if event.key == K_SPACE:
                    defence.shoot(missile_list)
                if event.key == K_p:
                    pause_game(screen)
            if event.type == KEYUP:
                pass

        # clear the screen before drawing
        screen.fill(BACKGROUND)

        # Game logic and draws

        # --- cities
        for city in city_list:
            city.draw(screen)

        # --- interceptor turret
        defence.update()
        defence.draw(screen)

        # --- missiles
        for missile in missile_list[:]:
            missile.update(explosion_list)
            missile.draw(screen)
            if missile.detonated:
                missile_list.remove(missile)

        # --- explosions
        for explosion in explosion_list[:]:
            explosion.update()
            explosion.draw(screen)
            if explosion.complete:
                explosion_list.remove(explosion)

        # --- Draw the interface
        director.draw(screen, defence)

        # --- update game director
        if current_game_state == GAME_STATE_RUNNING:
            current_game_state = director.update(missile_list, explosion_list,
                                                 city_list)

        # load message for Game Over and proceed to high-score / menu
        if current_game_state == GAME_STATE_OVER:
            director.game_over(screen)

        # load a message and set new game values for start new level
        if current_game_state == GAME_STATE_NEW_LEVEL:
            director.new_level(screen, defence)

        # Update the display
        pygame.display.update()

        # hold for few seconds before starting new level
        if current_game_state == GAME_STATE_NEW_LEVEL:
            time.sleep(3)
            current_game_state = GAME_STATE_RUNNING

        # hold for few seconds before proceeding to high-score or back to menu or game over splash
        if current_game_state == GAME_STATE_OVER:
            input_box = InputBox(100, 100, 140, 32)
            while input_box.check_finished() == False:
                for event in pygame.event.get():
                    input_box.handle_event(event)
                input_box.update()
                input_box.draw(screen)
            '''
            if check_high_score != 0:
                high_scores = update_high_scores(director.get_player_score(), "XXX", high_scores)
                save_high_scores("scores.json", high_scores)
            time.sleep(3)
            # TBC - below line should move game on to new game state for menu/game-over/high-score/etc.
            '''
            current_game_state = GAME_STATE_MENU

        # display the high scores
        if current_game_state == GAME_STATE_MENU:
            show_high_scores(screen, high_scores)
            current_game_state = 0

        # run at pre-set fps
        clock.tick(FPS)