summaryrefslogtreecommitdiff
path: root/snakegame/bots/__init__.py
blob: c404485b5cea1565bf9c18a38caf9c7bd62fdb8b (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from random import choice

from snakegame import common

def make_direction_bot(direction, human):
    def bot(board, position):
        return direction
    bot.__doc__ = 'This bot always moves %s.' % human
    return bot

up_bot = make_direction_bot('U', 'up')
down_bot = make_direction_bot('D', 'down')
left_bot = make_direction_bot('L', 'left')
right_bot = make_direction_bot('R', 'right')

def random_bot(board, position):
    "This bot just chooses a random direction to move."
    return choice('UDLR')

def random_avoid_bot(board, position):
    """
    This bot chooses a random direction to move, but will not move into a
    square which will kill it immediately (unless it has no choice).
    """
    x, y = position

    available = []
    for direction, (dx, dy) in common.directions.items():
        cell = common.get_cell(board, x + dx, y + dy)
        if common.is_vacant(cell):
            available.append(direction)

    if not available:
        return 'U'
    return choice(available)

BUILTIN_BOTS = {
    'up_bot': up_bot,
    'down_bot': down_bot,
    'left_bot': left_bot,
    'right_bot': right_bot,
    'random_bot': random_bot,
    'random_avoid_bot': random_avoid_bot,
}