Skip to content

LevKats/game_bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 

Repository files navigation

Лабиринт (Бот)

Сборка

По-хорошему это должно собираться под Linux. Из зависящих от платформы файлов тут только Server.h/cpp, где используются отсутствующие в стандарте C++14 функции для работы с сокетами. Также там используется pthread.h.

  1. Сборка части на C++ (сервер) Перейдем в поддиректорию cpp:

    $ cd cpp
    

    Создадим папку build и перейдем в нее:

    $ mkdir build
    $ cd build
    

    Сама сборка:

    $ cmake ..
    $ make
    

    Таким образом в ./cpp/build у нас появился исполняемый файл ./main

  2. Часть на Python (клиент и бот) Перейдем в py:

    $ cd py
    

    Создадим виртуальную среду:

    $ python3 -m venv
    

    Перейдем в нее:

    $ source ./venv/bin/activate
    

    Установим зависимости:

    $ pip install -r requirements.txt
    

    Выйдем из окружения (опционально)

    $ deactivate
    

Запуск

Нужно последовательно выполнить два пункта. Важно, чтобы порт оказался одинаковым и свободным.

  1. Сервер
    $ ./cpp/build/main <PORT> <N_WORKERS> <TIMEOUT>
    
  2. Бот (потребуется токен)
    $ source ./py/venv/bin/activate
    $ python3 ./py/main.py
    

Правила

  1. Игра происходит на квадратом лабиринте. Изначально он связен (даже без порталов), и в нем отсутствуют циклы (если убрать порталы). В лабиринте также существуют специальные виды клеток, о взаимодействии с которыми игроку будет дополнительно сообщаться.
  2. Игра, как это ни странно, состоит из ходов. Люди и медведи (NPC) ходят по очереди
  3. Каждый ход человек может сделать ровно одно из шести действий:
    1. Пропустить ход
    2. Идти. Об успехе операции вам сообщат. Операция успешна, если вы сдвинулись с места. Идти можно только на соседнюю клетку, где нет стены.
    3. Стрелять (при наличии патронов и если персонаж живой). Пуля летит по прямой, пока не встретит человека или медведя или стену. Попав в кого-то убивает всех, кто находится на этой клетке. Убитые медведи больше не участвуют в игре. Об успехе сообщат. Операция успешна, если вы в кого-то попали.
    4. Взорвать стену (при наличии бомб и если персонаж живой). Об успехе операции сообщат. Успешной операцией считается та, в результате которой количество стен уменьшилось.
    5. Попытаться выйти (если персонаж живой, у него есть сокровище, он на клетке выход. Клетка выход может быть в любом месте лабиринта). В случае успеха вы становитесь победителем.
    6. Сдаться. Вы больше не участвуете в игре. Ваше сокровище остается на той клетке, где вы были. Вас больше не будет на поле.
  4. Каждый игрок может закончить игру.
  5. Состояние игрока. Каждый человек характеризуется 4 показателями:
    1. Количество патронов. Патронами можно стрелять в свой ход по правилу 2.2. Патроны можно пополнить на клетке арсенал.
    2. Количество бомб. Бомбами можно взрывать стены. См. правило 2.3. Бомбы можно пополнить на клетке арсенал.
    3. Наличие сокровища. Только живой человек может переносить сокровище. Сокровище убитого человека остается на месте убийства, человек становится призраком, пока не найдет клетку больница.
    4. Жизнь. Игрок либо жив, либо мертв.
  6. Особые клетки:
    1. Выход. Только здесь можно выйти, используя правило 2.5.
    2. Арсенал. Здесь пополняются патроны и бомбы. Это происходит автоматически после вашего появления на клетке.
    3. Больница. Здесь человек может пополнить здоровье. Это происходит автоматически после вашего появления на клетке.
    4. Портал. Если в конце хода вы на нем, вы перемещаетесь на следующий портал (если вы на последнем, то на первый). Вам сообщат, если вы переместились.
    5. Сокровище. В одной из клеток изначально лежит сокровище. Может перемещаться из-за игроков (кто-то мог его взять, а потом быть застреленным или съеденным)
  7. Подсказки. Каждому игроку в начале хода говорят о наличии стен вокруг него, типе клетки под ним, состоянии игрока. В конце хода говорят об успехе операции и о том, переместился ли игрок.
  8. Все люди оставляют за собой след. Это последние несколько клеток, на которых был игрок. Его может видеть медведь.
  9. Медведь в игре.
    1. Кажлый ход медведь может либо идти в одном из направлений, либо атаковать игрока, который находится на клетке с ним.
    2. Застреленный медведь удаляется из игры и больше в ней не участвует.
    3. Медведь может использовать порталы. Намеренно этого делать не станет, но может случайно в них забрести или прийти туда, погнавшись за игроком.
    4. У медведя есть поле зрения. Он видит на определенном расстоянии по прямой следы игрока или его. Медведь не может видеть сквозь стены.
    5. Медведь не может видеть мертвых игроков или их следы.
    6. Увидев игрока, издает рычание и обязательно идет в этом направлении. Если игроков несколько, выбирает случайное из направлений на игроков равновероятно.
    7. Увидев след игрока, также подает какой-нибудь сигнал и идет в этом направлении, если не видит самого игрока. Если видит несколько клеток со следами, выбирает случайное направление на след.
    8. Медведь любит свою берлогу. Если медведь начинает отходить далеко от клетки спауна, вероятность его хода обратно начинает расти (если медведь не видит игрока или его след). Остальные допустимые направления равновероятны.
    9. При попадании в портал теряеется и чувствует себя немного неловко. Новой точкой спауна становится место, куда он телепортировался.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published