test version
Find a file
2025-01-19 23:06:21 +00:00
.idea refactor: add last version of main.go file 2025-01-19 19:53:16 +03:00
contracts chore: fix typos and add todos 2025-01-19 22:26:35 +00:00
nft_ideas Upload files to "nft_ideas" 2025-01-19 15:53:17 +00:00
schemes Upload files to "schemes" 2025-01-19 13:22:49 +00:00
TestContract refactor: add last version of main.go file 2025-01-19 19:53:16 +03:00
process_description.md Add process_description markdownn file 2025-01-17 20:33:43 +00:00
README.md Update README.md 2025-01-19 23:06:21 +00:00

web3_draft

Игра-викторина для web3

Основная концепция проекта заключается в создании игрового приложения на базе технологий Web3, где пользователи могут создавать комнаты для викторин и взаимодействовать с другими участниками. Хост комнаты задает вопрос, на который участники должны ответить. Каждый участник, подключившийся к комнате, оплачивает небольшую комиссию, а также платит за отправку своего ответа. После того как все ответы собраны, они становятся видимыми для всех, и участники могут голосовать за лучший ответ, выбирая тот, который, по их мнению, наиболее правильный или интересный. Лучшие ответы получают вознаграждения в токенах.

Игровой процесс организован в виде раундов: хост запускает каждый новый раунд с новым вопросом, и все участники могут участвовать в голосовании и давать свои ответы. Контракт отслеживает участие, проверяет готовность всех к следующему раунду и автоматически распределяет токены за лучшие ответы. В конце игры хост и участники получают вознаграждения, и все данные становятся неизменяемыми, гарантируя честность и прозрачность игры благодаря использованию блокчейн-технологий.

Основная логика:

  1. Создание комнаты: хост создает комнату с указанием количества участников и количества победителей (1 или 3), после чего ему возвращается id созданной комнаты. Для создания комнаты хосту необходимо оплатить комиссию, но во время игры ему будет доступна возможность получать токены за проведение игры.
  2. Присоединение участников: хост передает участникам id созданной комнаты, после чего они заходят в нее, ждут подключения других игроков и начала игры. При подключении в комнату контракт списывает комиссию за свою работу.
  3. Начало раунда: хост создает вопрос, за это с него списывается комиссия. Для создания вопроса необходимо прикрепить данные для него (сейчас у нас только текст, но в будущем можно расширить до отправки фото/видео или набора элементов текст + видео и т. д). После создания вопроса, он отсылается всем привязанным к комнате юзерам, и начинается прием ответов.
  4. Получение ответов: прием ответов заканчивается либо когда мы получаем отклики от всех участников, либо когда хост сам его завершает командой. С этого момента вопрос считается закрытым, и начинается открытие всех ответов пользователей. Если пользователь не успел ответить за отведенное время, то его ответ считается пустым и не участвует в голосовании. Если у пользователя не хватило токенов на отправку ответа, то он считается выбывшим и больше не имеет права на посылку ответов и голосование (как бы становится наблюдателем, и с этого момента ему просто отсылается текущий статус игры, без возможности вмешиваться в ее процесс).
  5. Голосование: получив все ответы, у пользователя появляется возможность проголосовать за лучший по его мнению ответ и подтвердить готовность к началу следующего раунда. Голосовать можно до начала следующего раунда, иначе запрос будет отклонен.
  6. Завершение раунда: как только все участники дали подтверждение на готовность к следующему раунду, хосту дается возможность создать новый раунд. Как только хост создает новый раунд, всем участникам отсылается статистика голосования по вопросам и текущий топ участников, а также распределяются вознаграждения за раунд между хостом, который берет больший процент, и непосредственно между выигравшими участниками в этом раунде, а средства на вознаграждения берутся из кошелька контракта комнаты, на который приходят начисления во время игры за создание вопросов и ответов на них. Если же хост хочет закончить игру, то он может сделать это только на этом шаге, не дожидаясь готовности всех участников.
  7. Завершение игры: как только хост завершает игру, всем участникам отсылаются результаты игры (подробная статистика со всеми раундами, вопросами и ответами, а также результаты голосований в каждом раунде и общий список игроков и их счет). После успешного завершения игры хосту отправляется процент с комиссии за приглашение пользователей, а остальной процент отдается победителям в игре.

Описание игры:

Описание основных действующих лиц и их действий

Процесс вызова метода игры (общий вид)

Список команд, используемых в игре:

host:

  • createRoom(host, countWinners)
  • startGame(roomId)
  • askQuestion(roomId, question)
  • endQuestion(roomId)
  • finishGame(roomId)

player:

  • joinRoom(roomId)
  • confirmReadiness(roomId)
  • sendAnswer(roomId, text)
  • voteAnswer(roomId, answerIdx), где answerIdx - индекс для сохранения порядка, в котором пишутся ответы при отправке игроками
  • voteToFinishGame(roomId)