Beispiel #1
0
class TestBoard(unittest.TestCase):
    def setUp(self) -> None:
        self.board = Board(width=25, height=25)

    def test_add_snake_random(self):
        self.board.add_object('snake')
        self.assertEqual(1, len(self.board.objects['snake']), "Single snake not added correctly")

    def test_add_snake_specific(self):
        self.board.snakes = []

        self.board.add_object("snake", Point(x=10, y=15))
        snake = self.board.objects['snake'].pop()

        self.assertEqual(10, snake.get_head().x, "x position not set correctly")
        self.assertEqual(15, snake.get_head().y, "y position not set correctly")
        self.assertEqual(constants.LEN_SNAKE_START, len(snake), "Snake is not start length")

    def test_add_snake_collision(self):
        self.board.snakes = []

        self.board.add_object("snake", Point(x=20, y=20))
        self.board.add_object("snake", Point(x=20, y=20))

        snake_1 = self.board.objects['snake'].pop()
        snake_2 = self.board.objects['snake'].pop()

        self.assertEqual(False, snake_1 in snake_2, "These are the same snakes")

    def test_setting_seed(self):
        """ Test if the same board is produced after setting a seed.  """
        seed = self.board.seed()

        for _ in range(10):
            self.board.reset()
        state = self.board.board

        self.board.seed(seed)
        for _ in range(10):
            self.board.reset()

        self.assertEqual([o.__class__.__name__ for x in state for o in x],
                         [o.__class__.__name__ for x in self.board.board for o in x], "Unable to reproduce same board")
Beispiel #2
0
class SnakeGame:
    """ Remapping of all board functions to the public available environment functions.  """
    def __init__(self, width=None, height=None):
        self.board = Board(width, height)
        self.image = np.zeros((self.board.width, self.board.height, 3),
                              dtype=np.uint8)

    def obs(self, attribute="rgb"):
        return self.board.obs(attribute)

    def reward(self):
        return self.board.reward()

    def done(self):
        return self.board.done()

    def info(self):
        return self.board.info()

    def step(self, action: int):
        self.board.step(action, values=False)
        return self.obs(), self.reward(), self.done(), self.info()

    def reset(self):
        """ Reset the game, and should return the start observation of the game. """
        self.board.reset()
        return self.obs()

    def render(self):
        return self.board.obs(attribute='rgb')

    def close(self):
        self.board.close()

    def seed(self, seed=None):
        return self.board.seed(seed)