def __get_arena_copy(self):
    original = self.game.arena

    arena_copy = Arena(
      width=original.get_width(),
      length=original.get_length()
    )

    arena_copy.space = original.space.copy()

    return arena_copy
Example #2
0
  def setUp(self):
    self.arena = Arena(width=2, length=3)

    self.expected_space = {
      (1, 1): None, (2, 1): None,
      (1, 2): None, (2, 2): None,
      (1, 3): None, (2, 3): None
    }
Example #3
0
  def __init__(self, player_one_name="1", player_two_name="2"):
    self.arena   = Arena()
    self.player1 = Player(
      player_one_name,
      self.arena.get_upper_left_position()
    )
    self.player2 = Player(
      player_two_name,
      self.arena.get_lower_right_position()
    )

    self.player1.direction = DIRECTIONS.south
    self.player2.direction = DIRECTIONS.north

    self.move_count     = 0
    self.last_player    = None
    self.current_player = self.player1
Example #4
0
class TestArena(unittest.TestCase):
  def setUp(self):
    self.arena = Arena(width=2, length=3)

    self.expected_space = {
      (1, 1): None, (2, 1): None,
      (1, 2): None, (2, 2): None,
      (1, 3): None, (2, 3): None
    }

  def test_width(self):
    self.assertEqual(self.arena.get_width(), 2)

  def test_length(self):
    self.assertEqual(self.arena.get_length(), 3)

  def test_space(self):
    self.assertEqual(self.arena.space, self.expected_space)

  def test_get_upper_left_position(self):
    self.assertEqual(
      self.arena.get_upper_left_position(), (1, 1)
    )

  def test_get_upper_right_position(self):
    self.assertEqual(
      self.arena.get_upper_right_position(), (2, 1)
    )

  def test_get_lower_left_position(self):
    self.assertEqual(
      self.arena.get_lower_left_position(), (1, 3)
    )

  def test_get_lower_right_position(self):
    self.assertEqual(
      self.arena.get_lower_right_position(), (2, 3)
    )

  def test_player_is_in_bounds_for_in_bounds_player(self):
    player = Player("Test", (1, 1))

    self.assertTrue(
      self.arena.player_is_in_bounds(player)
    )

  def test_player_is_in_bounds_for_out_of_bounds_player(self):
    player = Player("Test", (0, 17))

    self.assertFalse(
      self.arena.player_is_in_bounds(player)
    )

  def test_claim_space_for_unclaimed_space(self):
    player = Player("Test", (1, 1))

    self.arena.claim_space_for(player, (1, 2))

    self.assertEqual(
      self.arena.space.get((1, 2)), player
    )

  def test_claim_space_for_out_of_bounds_space(self):
    player = Player("Test", (1, 1))

    self.arena.claim_space_for(player, (0, 0))

    self.assertIsNone(
      self.arena.space.get(player.position, None)
    )

  def test_claim_space_for_claimed_space(self):
    player  = Player("Test", (1, 1))
    player2 = Player("Already Here", (1, 2))

    self.arena.space[(3, 3)] = player2

    self.arena.claim_space_for(player, (3, 3))

    self.assertEqual(
      self.arena.space.get((3, 3)), player2
    )
Example #5
0
class Game:
  def __init__(self, player_one_name="1", player_two_name="2"):
    self.arena   = Arena()
    self.player1 = Player(
      player_one_name,
      self.arena.get_upper_left_position()
    )
    self.player2 = Player(
      player_two_name,
      self.arena.get_lower_right_position()
    )

    self.player1.direction = DIRECTIONS.south
    self.player2.direction = DIRECTIONS.north

    self.move_count     = 0
    self.last_player    = None
    self.current_player = self.player1

  def is_over(self):
    return (
      self.player1.is_dead() or self.player2.is_dead()
    )

  def is_tie(self):
    return (
      self.player1.is_dead() and self.player2.is_dead()
    )

  def is_won(self):
    return (
      not self.is_tie() and self.is_over()
    )

  def get_winner(self):
    if self.is_won():
      return next(
        player for player
        in [self.player1, self.player2]
        if player.is_alive()
      )

  def get_owner(self, position):
    return self.arena.get_owner(position)

  def player_is_in_bounds(self, player):
    return self.arena.player_is_in_bounds(player)

  def player_is_out_of_bounds(self, player):
    return self.arena.player_is_out_of_bounds(player)

  def claim_space_for(self, player, position, force=False):
    self.arena.claim_space_for(player, position, force=force)

  def get_next_player(self):
    if not self.is_won():
      return next(
        player for player
        in [self.player1, self.player2]
        if player is not self.current_player
      )

  def get_available_directions(self):
    direction = self.current_player.direction
    return valid_directions_for(direction)

  def get_copy(self):
    return GameCopier(self).generate()