コード例 #1
0
 def testMoveResultHitUnknownObject(self):
     game_map = Map2D(2, 1)
     snake = Snake(game_map, 0, 0, Direction.X_POSITIVE)
     game_map.put('some_object', 1, 0)
     with self.assertRaises(RuntimeError) as context:
         snake.move()
     self.assertIn('Blocking object unknown type', str(context.exception))
コード例 #2
0
 def testMovementUnsuccessfulDirectionChange(self):
     game_map = Map2D(3, 3)
     snake = Snake(game_map, 0, 1, Direction.X_POSITIVE)
     snake.move()
     snake.set_direction(Direction.X_NEGATIVE)
     snake.move()
     self.assertEqual(game_map.peek(2, 1), snake)
コード例 #3
0
 def testSnakeLength(self):
     game_map = Map2D(2, 1)
     snake = Snake(game_map, 0, 0, Direction.X_POSITIVE)
     self.assertEqual(len(snake), 1)
     Food(game_map)
     snake.move()
     self.assertEqual(len(snake), 2)
コード例 #4
0
 def testMoveResultAteFood(self):
     game_map = Map2D(2, 1)
     snake = Snake(game_map, 0, 0, Direction.X_POSITIVE)
     Food(game_map)
     self.assertEqual(snake.move(), Snake.MoveResult.ATE_FOOD)
     self.assertIs(game_map.peek(0, 0), snake)
     self.assertIs(game_map.peek(1, 0), snake)
     self.assertEqual(snake.head_pos(), (1, 0))
コード例 #5
0
 def testMoveSnakeOnCircularPath(self):
     game_map = Map2D(2, 2)
     snake = Snake(game_map, 0, 0, Direction.X_POSITIVE)
     Food(game_map)
     Food(game_map)
     Food(game_map)
     snake.move()
     snake.set_direction(Direction.Y_POSITIVE)
     snake.move()
     snake.set_direction(Direction.X_NEGATIVE)
     snake.move()
     snake.set_direction(Direction.Y_NEGATIVE)
     self.assertEqual(snake.move(), Snake.MoveResult.MOVED)
     self.assertEqual(snake.head_pos(), (0, 0))
     self.assertEqual(snake.end_pos(), (1, 0))
コード例 #6
0
 def testMoveResultHitWall(self):
     game_map = Map2D(1, 1)
     snake = Snake(game_map, 0, 0, Direction.Y_NEGATIVE)
     self.assertEqual(snake.move(), Snake.MoveResult.HIT_WALL)
コード例 #7
0
 def testMoveInUndefinedDirection(self):
     game_map = Map2D(1, 1)
     snake = Snake(game_map, 0, 0, 'not_a_direction')
     with self.assertRaises(RuntimeError) as context:
         snake.move()
     self.assertIn('Invalid direction', str(context.exception))
コード例 #8
0
 def testMoveXPositive(self):
     game_map = Map2D(3, 3)
     snake = Snake(game_map, 1, 1, Direction.X_POSITIVE)
     self.assertEqual(snake.move(), Snake.MoveResult.MOVED)
     self.assertIs(game_map.peek(2, 1), snake)
     self.assertIsNone(game_map.peek(1, 1))
コード例 #9
0
 def testMoveYNegative(self):
     game_map = Map2D(3, 3)
     snake = Snake(game_map, 1, 1, Direction.Y_NEGATIVE)
     self.assertEqual(snake.move(), Snake.MoveResult.MOVED)
     self.assertIs(game_map.peek(1, 0), snake)
     self.assertIsNone(game_map.peek(1, 1))
コード例 #10
0
 def test_move_horizontal_snake_down(self):
     snake = Snake([[4, 3], [5, 3], [6, 3]])
     snake.move('down')
     self.assertEqual(snake.positions, [[5, 3], [6, 3], [6, 4]])
     self.assertEqual(snake.direction, 'down')
コード例 #11
0
 def test_move_snake_up(self):
     snake = Snake([[5, 5], [5, 4], [5, 3]], direction='up')
     snake.move('up')
     self.assertEqual(snake.positions, [[5, 4], [5, 3], [5, 2]])
     self.assertEqual(snake.direction, 'up')
コード例 #12
0
 def testMoveResultHitSnake(self):
     game_map = Map2D(2, 1)
     snake = Snake(game_map, 0, 0, Direction.X_POSITIVE)
     Snake(game_map, 1, 0, Direction.X_POSITIVE)
     self.assertEqual(snake.move(), Snake.MoveResult.HIT_SNAKE)
     self.assertIs(game_map.peek(0, 0), snake)
コード例 #13
0
 def test_move_horizontal_snake_up(self):
     snake = Snake([[4, 3], [5, 3], [6, 3]], direction='right')
     snake.move('up')
     self.assertEqual(snake.positions, [[5, 3], [6, 3], [6, 2]])
     self.assertEqual(snake.direction, 'up')
コード例 #14
0
ファイル: main.py プロジェクト: JayBizzles/101-DOC
screen.listen()

screen.onkey(snake.move_up, "Up")
screen.onkey(snake.move_left, "Left")
screen.onkey(snake.move_right, "Right")
screen.onkey(snake.move_down, "Down")

while snake.game_state:
    screen.update()
    time.sleep(0.2)

    print(screen.canvheight)

    print("#"*10)
    snake.move()
    print("#" * 10)
    #detect collision with food
    if snake.head.distance(food) < 15:
        food.set_val()
        scoreboard.add_point()
        snake.add_to_tail()

    #detect collision with wall
    if abs(snake.head.xcor()) >= screen.canvwidth-20:
        scoreboard.reset()
        snake.reset()
    elif abs(snake.head.ycor()) >= screen.canvheight:
        scoreboard.reset()
        snake.reset()
コード例 #15
0
 def test_should_keep_direction_when_trying_to_move_down_if_going_up(self):
     positions = [[5, 5], [5, 4], [5, 3]]
     snake = Snake(initial_positions=positions, direction='up')
     snake.move('down')
     self.assertEqual(snake.positions, [[5, 4], [5, 3], [5, 2]])
     self.assertEqual(snake.direction, 'up')
コード例 #16
0
 def test_should_keep_direction_when_trying_to_move_up_if_going_down(self):
     initial_positions = [[5, 3], [5, 4], [5, 5]]
     snake = Snake()
     snake.move('up')
     self.assertEqual(snake.positions, [[5, 4], [5, 5], [5, 6]])
     self.assertEqual(snake.direction, 'down')
コード例 #17
0
 def test_should_keep_direction_when_trying_to_move_left_if_going_right(self):
     positions = [[4, 3], [5, 3], [6, 3]]
     snake = Snake(initial_positions=positions, direction='right')
     snake.move('left')
     self.assertEqual(snake.positions, [[5, 3], [6, 3], [7, 3]])
     self.assertEqual(snake.direction, 'right')
コード例 #18
0
 def test_move_snake_right_from_initial_position(self):
     snake = Snake()
     snake.move('right')
     self.assertEqual(snake.positions, [[5, 4], [5, 5], [6, 5]])
     self.assertEqual(snake.direction, 'right')
コード例 #19
0
 def testReturnsEndPosition(self):
     game_map = Map2D(2, 1)
     snake = Snake(game_map, 1, 0, Direction.X_NEGATIVE)
     Food(game_map)
     snake.move()
     self.assertEqual(snake.end_pos(), (1, 0))
コード例 #20
0
 def testHeadPositionIsCorrectAfterMove(self):
     game_map = Map2D(3, 3)
     snake = Snake(game_map, 1, 1, Direction.X_POSITIVE)
     snake.move()
     self.assertEqual(snake.head_pos(), (2, 1))
コード例 #21
0
def run(weights,
        number_of_hidden_layers,
        node_for_first_layer,
        node_for_hidden_layer,
        node_for_last_layer,
        max_steps,
        board_size=None,
        draw=False,
        generation=None):
    snake = Snake(board_size=board_size, generation=generation)
    score = 0
    game_score = 0
    direction = 0
    same_direction = 0

    left_collision, right_collision, front_collision, angle, distance = snake.return_variables(
    )

    network = Network(number_of_hidden_layers, node_for_first_layer,
                      node_for_hidden_layer, node_for_last_layer, weights)

    if draw:
        snake.init_draw()

    snake.start_game()

    steps = 0

    while steps < max_steps:
        if not snake.playing:
            break

        # last_distance = distance
        last_score = game_score
        last_direction = direction

        network.set_first_layer([
            left_collision, right_collision, front_collision, angle, distance
        ])
        output = network.calculate_output()
        if output[0] >= output[1]:
            if output[0] >= output[2]:
                left_collision, right_collision, front_collision, angle, distance = snake.move(
                    "left")
                direction = 0
            else:
                left_collision, right_collision, front_collision, angle, distance = snake.move(
                    "forward")
                direction = 2
        elif output[1] >= output[2]:
            left_collision, right_collision, front_collision, angle, distance = snake.move(
                "right")
            direction = 1
        else:
            left_collision, right_collision, front_collision, angle, distance = snake.move(
                "forward")
            direction = 2

        game_score = snake.score

        if game_score > last_score:
            score += 1
            steps = 0
        if last_direction == direction:
            same_direction += 1
        else:
            same_direction = 0
        if same_direction > board_size:
            score = 0
            snake.playing = False

        if draw:
            snake.draw_game()
            sleep(0.02)
        steps += 1

    return score
コード例 #22
0
 def test_move_snake_down_from_initial_position(self):
     snake = Snake()
     snake.move('down')
     self.assertEqual(snake.positions, [[5, 4], [5, 5], [5, 6]])
     self.assertEqual(snake.direction, 'down')