add new Snake
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import unittest
|
||||
from snakes.MasterSnake import MasterSnake
|
||||
|
||||
class TestMasterSnake(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.snake = MasterSnake()
|
||||
self.game_data = {
|
||||
"board": {
|
||||
"height": 11,
|
||||
"width": 11,
|
||||
"snakes": [
|
||||
{
|
||||
"id": "snake-1",
|
||||
"body": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0}
|
||||
],
|
||||
"head": {"x": 2, "y": 1},
|
||||
},
|
||||
{
|
||||
"id": "snake-2",
|
||||
"body": [
|
||||
{"x": 5, "y": 4},
|
||||
{"x": 5, "y": 3},
|
||||
{"x": 6, "y": 3},
|
||||
{"x": 6, "y": 2}
|
||||
],
|
||||
"head": {"x": 6, "y": 3},
|
||||
}
|
||||
],
|
||||
"food": [
|
||||
{
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"x": 10,
|
||||
"y": 8
|
||||
},
|
||||
{
|
||||
"x": 5,
|
||||
"y": 5
|
||||
}
|
||||
],
|
||||
},
|
||||
"you": {
|
||||
"id": "snake-1",
|
||||
"body": [
|
||||
{"x": 0, "y": 0},
|
||||
{"x": 1, "y": 0},
|
||||
{"x": 2, "y": 0}
|
||||
],
|
||||
"head": {"x": 0, "y": 0},
|
||||
}
|
||||
}
|
||||
|
||||
def test_avoid_snake_body(self):
|
||||
snakes = self.game_data['board']['snakes']
|
||||
board_width = self.game_data['board']['width']
|
||||
board_height = self.game_data['board']['height']
|
||||
safe_positions = self.snake.avoid_snake_body(snakes, board_width, board_height)
|
||||
self.assertIsInstance(safe_positions, list)
|
||||
self.assertTrue(all(isinstance(pos, dict) for pos in safe_positions))
|
||||
self.assertTrue(all('x' in pos and 'y' in pos for pos in safe_positions))
|
||||
|
||||
def test_find_safe_positions(self):
|
||||
body_positions = {(0, 0), (1, 0), (2, 0), (5, 4), (5, 3), (6, 3), (6, 2)}
|
||||
safe_positions = self.snake.find_safe_positions(body_positions, 11, 11)
|
||||
self.assertNotIn({'x': 0, 'y': 0}, safe_positions)
|
||||
self.assertIn({'x': 10, 'y': 10}, safe_positions)
|
||||
|
||||
def test_choose_move(self):
|
||||
move = self.snake.choose_move(self.game_data)
|
||||
self.assertIn(move, ["up", "down", "left", "right"])
|
||||
|
||||
def test_move_towards_food(self):
|
||||
head = {'x': 0, 'y': 0}
|
||||
food = (5, 5)
|
||||
safe_positions = [{'x': 1, 'y': 0}, {'x': 0, 'y': 1}, {'x': 1, 'y': 1}]
|
||||
direction = self.snake.move_towards_food(head, food, safe_positions)
|
||||
self.assertIn(direction, ["up", "down", "left", "right"])
|
||||
|
||||
def test_find_path_to_food(self):
|
||||
path = self.snake.find_path_to_food(self.game_data)
|
||||
print(path)
|
||||
self.assertIsInstance(path, list)
|
||||
self.assertTrue(all(isinstance(pos, dict) for pos in path))
|
||||
self.assertTrue(all('x' in pos and 'y' in pos for pos in path))
|
||||
|
||||
def test_find_direction(self):
|
||||
head = {'x': 0, 'y': 0}
|
||||
safe_positions = [{'x': 1, 'y': 0}, {'x': 0, 'y': 1}, {'x': 1, 'y': 1}]
|
||||
direction = self.snake.find_direction(head, safe_positions)
|
||||
self.assertIn(direction, ["up", "down", "left", "right"])
|
||||
|
||||
def test_avoid_dead_ends(self):
|
||||
head = {'x': 0, 'y': 0}
|
||||
move = "right"
|
||||
board_width = 11
|
||||
board_height = 11
|
||||
snakes = self.game_data['board']['snakes']
|
||||
safe_positions = [{'x': 1, 'y': 0}, {'x': 0, 'y': 1}, {'x': 1, 'y': 1}]
|
||||
new_move = self.snake.avoid_dead_ends(head, move, safe_positions, board_width, board_height, snakes)
|
||||
self.assertIn(new_move, ["up", "down", "left", "right"])
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user