Телеграмм бот, с которым можно играть в игру "Морской бой"
- Генерировать игровое поле противника и расставлять корабли случайным образом
- Генерировать игровое поле игрока и расставлять корабли случайным образом
- Хранить состояние ("в игре", "не в игре")
- Репрезентовать игровое поле в виде клавиатуры 8Х8
- Отмечать промахи и попадания на поле
- Нагибать игрока шквальным огнём
- do it
- Пользователь отправляет команду /start боту (или стартует его, найдя в поиске)
- Бот приветствует пользователя и предлагает сыграть в игру "Морской бой", возвращая сообщение с двумя кнопками "Игра", "Не хочу", также предлагает пользователю прочитать подробные правила, отправив команду /help
- На этом этапе пользователь может совершить 4 действия
- Согласиться поиграть с ботом в игру, выбрав кнопку "Игра"
- Не согласиться играть, выбрав кнопку "Не хочу"
- Отправить в чат команду /help
- Отправить в чат любое другое сообщение
- Пользователь отправляет в чат согласие играть в игру
- Бот сообщает пользователю, что очень рад поиграть и возвращает игровое поле противника
- Бот сохраняет информацию о том, что пользователь находится в состоянии "Игра"
- Пользователь на этом этапе может совершить 3 действия
- Выбрать ячейку нанесения удара
- Прислать в чат команду /cancel
- Прислать что-то отличное от этих 2-х пунктов
- Пользователь атакует
- Бот проверяет, попал или нет
- Если попал
- Если все корабли потоплены, поздравляет с победой и переводит игру в состояние "не в игре", присылает пользователю сообщение с предложением сыграть еще раз
- Возвращает поле для следующего выстрела и так до промаха
- Если нет
- Возвращает поле игрока, и передаёт ход боту
- Бот атакует
- Бот проверяет, попал или нет
- Если попал
- Если все корабли потоплены, поздравляет себя с победой и переводит игру в состояние "не в игре", присылает пользователю сообщение с предложением сыграть еще раз
- Бот атакует и так до промаха
- Если нет
- Возвращает поле противника, и передаёт ход игроку
- Пользователь присылает в чат команду /cancel
- Бот переводит состояние из "в игре" в "не в игре"
- Бот отправляет в чат сообщение о том, что игра закончилась
- Бот отправляет в чат сообщение о том, что если пользователь захочет снова сыграть, то пусть отправит сообщение "Игра"
- Пользователь в состоянии "в игре" присылает в чат, что какое-то действие не связанное с игровыми правилами
- Бот отправляет пользователю сообщение о том, что по правилам игры пользователь может выбрать ячейку для атаки или команду /cancel
- Пользователь отправляет в чат отказ играть в игру
- Бот отправляет пользователю сообщение, типа, "Понятно! Струсил!" и инструкцию, что нужно сделать пользователю если он все-таки захочет поиграть
- Пользователь отправляет в чат команду /help
- Бот присылает пользователю правила игры и описание команд
- Пользователь отправляет в чат любое другое сообщение
- Бот сообщает, что не понимает пользователя и снова предлагает сыграть в игру