Программируем танк

Структура карты

Рассмотрим параметры нашего бота подробнее.

def make_choice(x,y,field):
    #произвольный код

Переменная field - это матрица, каждая ячейка которой - это клетка на карте. Матрица игры содержит информацию о:

  • расположении игроков, монеток и стен на карте;
  • текущем уровне жизни всех игроков;
  • истории ходов каждого игрока с начала игры.

Технически field - список столбцов, каждый из который - это список клеток. Номер столбца - это координата точки по оси X, а номер элемента в столбце - координата по оси Y.

Например, размеры карты можно определить следующим образом:

def make_choice(x,y,field):
    width = len(field) # число столбцов
    height = len(field[0]) # число клеток в первом столбце

    # код бота

В каждой клетке может находиться:

  • 0, если клетка пустая;
  • 1, если в клетке монетка;
  • -1, если в клетке стена;
  • {"name": "bot name", "life": 10, "history": ["go_right"]}, если в клетке бот (словарь с его именем, здоровьем и историей ходов).

Например, вот так можно проверить, есть ли монетка в клетке (0,0):

def make_choice(x,y,field):
    if field[0][0] == 1:
        # в клетке (0, 0) есть монетка
    # код бота

А чтобы узнать уровень здоровья нашего бота, можно написать:

def make_choice(x,y,field):
    my_life = field[x][y]['life']
    # код бота

История ходов - это все предыдущие ходы танка. Если в течение хода танк сработал с ошибками, в историю будет добавлена строка "crash". Длина списка с историей равна числу ходов, прошедших с начала раунда.

В примере ниже, танк будет ходить вверх, если предыдущий ход был таким же:

def make_choice(x,y,field):
    my_history = field[x][y]['history']
    num_of_steps = field[x][y]['history']

    if (num_of_step > 0 and my_history[-1] == 'go_up'):
        return 'go_up'
    # остальной код

Назад Вперед