Class GameManager

java.lang.Object
model.game.GameManager

public class GameManager extends Object
Central controller for the entire game, managing flow from start to finish. The UI communicates with GameManager via method calls and receives events back through GameEventListener.

Flow ของเกม:

 startGame() → selectCharacter(1) → selectCharacter(2)
   → [MAP_PHASE]    movePlayer(1/2, row, col) ซ้ำ ๆ
   → [BATTLE_PHASE] submitBattleAction(1/2, action) ซ้ำ ๆ
   → [GAME_OVER]
 
  • Field Details

    • state

      private GameState state
      Current game state.
    • player1

      private Player player1
      Player 1.
    • player2

      private Player player2
      Player 2.
    • selectedType1

      private CharacterType selectedType1
      Character type selected by player 1.
    • selectedType2

      private CharacterType selectedType2
      Character type selected by player 2.
    • map

      private MapGrid map
      Current map.
    • zoneManager

      private ZoneManager zoneManager
      Shrinking zone system.
    • battleManager

      private BattleManager battleManager
      Current battle manager (null if not in a battle).
    • mapRound

      private int mapRound
      Current map round.
    • p1MovedThisRound

      private boolean p1MovedThisRound
      Whether player 1 has moved this round.
    • p2MovedThisRound

      private boolean p2MovedThisRound
      Whether player 2 has moved this round.
    • pendingGoblinCell

      private Cell pendingGoblinCell
      The goblin cell currently being fought (used to remove the goblin after the battle).
    • listener

      private GameEventListener listener
      Listener registered by the UI to receive events.
  • Constructor Details

    • GameManager

      public GameManager()
      Creates a new GameManager, starting at MAIN_MENU.
  • Method Details

    • setListener

      public void setListener(GameEventListener listener)
      Registers the listener that will receive events from GameManager.
      Parameters:
      listener - UI component implementing GameEventListener
    • startGame

      public void startGame()
      Starts a new game by loading a random map and navigating to the character selection screen.
    • selectCharacter

      public void selectCharacter(int playerIndex, CharacterType type)
      Selects a character for the given player. Once both players have selected, the game automatically enters MAP_PHASE.
      Parameters:
      playerIndex - Player number (1 or 2)
      type - The chosen character type
    • movePlayer

      public void movePlayer(int playerIndex, int newRow, int newCol)
      Moves a player to the specified cell after validating the move. Items are picked up automatically; landing on a Goblin or the other player starts a battle.
      Parameters:
      playerIndex - Player number (1 or 2)
      newRow - Destination row
      newCol - Destination column
    • submitBattleAction

      public void submitBattleAction(int playerIndex, BattleAction action)
      Submits a battle action from a player. Once both sides have submitted, the turn resolves automatically.
      Parameters:
      playerIndex - Player number (1 or 2)
      action - The chosen action
    • startBattle

      private void startBattle(Entity entityA, Entity entityB, BattleManager.BattleMode mode)
      Starts a new battle between entityA and entityB.
      Parameters:
      entityA - Entity on side A
      entityB - Entity on side B
      mode - PvP or vs Goblin mode
    • handleBattleOver

      private void handleBattleOver(BattleResult result)
      Handles the outcome after a battle ends: removes the goblin from the map and distributes a tome or triggers game over.
      Parameters:
      result - The battle result
    • endMapRound

      private void endMapRound()
      Ends a map round: increments the round counter, checks for zone shrink, applies zone damage, and checks for deaths.
    • checkGameOver

      private void checkGameOver()
      Checks whether any player has died from zone damage and handles game over if so.
    • setState

      private void setState(GameState newState)
      Changes the game state and notifies the listener.
      Parameters:
      newState - The new state
    • getState

      public GameState getState()
      Returns:
      Current game state.
    • getPlayer1

      public Player getPlayer1()
      Returns:
      Player 1.
    • getPlayer2

      public Player getPlayer2()
      Returns:
      Player 2.
    • getMap

      public MapGrid getMap()
      Returns:
      Current map.
    • getZoneManager

      public ZoneManager getZoneManager()
      Returns:
      The ZoneManager for this game
    • getBattleManager

      public BattleManager getBattleManager()
      Returns:
      Current BattleManager (null if not in a battle)
    • getMapRound

      public int getMapRound()
      Returns:
      Current map round.