Я изучал разработку программного обеспечения и решил для начала заняться алгоритмами и структурами данных, поскольку исследования показывают, что структуры и алгоритмы данных (DSA) дают хорошее начало разработке программного обеспечения.

Пройдя несколько курсов по DSA, я решил сделать что-то практическое, чтобы быть более уверенным в том, что я узнал, и укрепить свои знания о некоторых других фреймворках и технологиях.

У меня были разные идеи, но самой реалистичной и увлекательной оказалась игра, которую я назвал caotico. В этой игре карточки с цифрами / буквами в качестве меток размещаются на экране случайным образом. Задача состоит в том, чтобы расположить эти карты в порядке возрастания или убывания в зависимости от инструкции, размещенной в основании экрана, после чего вы получаете очко и переходите к следующему раунду. Это казалось легким, пока я не начал.

Я обрисовал в общих чертах возможные проблемы, с которыми мне придется столкнуться, а именно:

Как генерировать случайные числа (карточки) и беспристрастно размещать их в случайных местах на экране?

Как лучше всего сохранить данные, необходимые в этой игре, без какой-либо потери данных и минимального использования подключения к Интернету?

Как подтвердить выигрыш?

Как создать многопользовательский режим? Ржу не могу.

Как генерировать случайные числа (карточки) и беспристрастно размещать их в случайных местах на экране?

Я не собирался использовать базу данных для сохранения этих данных, поскольку для этого потребуется подключение к Интернету, и мне придется вручную сохранять базу данных. Уф. Я занялся исследованием и нашел алгоритм тасования Фишера-Йейтса.

Перестановка Фишера-Йейтса - это алгоритм для генерации случайной перестановки конечной последовательности. Проще говоря, алгоритм перемешивает последовательность. Алгоритм эффективно складывает все элементы в шляпу; он постоянно определяет следующий элемент, случайным образом вытягивая элемент из шляпы, пока не останется никаких элементов. Алгоритм производит беспристрастную перестановку: каждая перестановка одинаково вероятна. Современная версия алгоритма эффективна: требуется время, пропорциональное количеству перетасовываемых элементов, и их перемешивание на месте.

Что за алгоритм, посланный Богом.

Я использовал мыслительный процесс Фишера-Йейтса, и вот как выглядит код;

Вы можете решить эту проблему с помощью алгоритма перемешивания рыбака Йейтса, чтобы улучшить ваше понимание → https://leetcode.com/problems/shuffle-an-array/

Как лучше всего сохранить такие данные без потери данных в какой-либо форме и с минимальным использованием подключения к Интернету?

В типичной игре основные необходимые данные - это названия, рекорды и их разновидности (серии очков и все такое). После долгих размышлений я решил использовать базу данных реального времени firebase, чтобы сохранять данные и иметь копию в локальном хранилище (это помогает избавиться от ужасных мыслей об использовании Интернета). Локальное хранилище было моим источником истинного значения, что все данные публикуются в локальном хранилище перед синхронизацией с Firebase (когда у вас есть подключение к Интернету).

Как подтвердить выигрыш?

В этой игре вы выигрываете раунд, если щелкаете все карты в правильном порядке в соответствии с инструкциями в основании экрана (ВОССТАНОВЛЕНИЕ ИЛИ УБЫВАНИЕ) до истечения таймера. Простой стек будет работать здесь в постоянное время, поскольку существует максимальное количество карт O (max), что достаточно прилично. Это выяснилось легко. Я заплатил свои взносы.

Как создать многопользовательский режим?

Я понятия не имел, как создать многопользовательский режим. Это было немного сложно, так как мне пришлось бы изучить новую технологию, вам определенно понадобится подключение к Интернету, и данные должны быть отправлены всем игрокам в режиме реального времени, чтобы сделать игру безупречной. После некоторого исследования я узнал о сокетах и ​​решил использовать PubNub (платформу сокетов).

Сетевой сокет - это программная структура в сетевом узле компьютерной сети, которая служит конечной точкой для отправки и получения данных по сети. Структура и свойства сокета определяются интерфейсом прикладного программирования (API) сетевой архитектуры. Сокеты создаются только во время существования процесса приложения, запущенного в узле.

Могу ли я передавать данные всем пользователям в режиме реального времени с помощью сокетов? Отлично!

PubNub - это платформа связи в реальном времени и компания, предлагающая инфраструктуру как услугу в реальном времени (IaaS), базирующаяся в Сан-Франциско, Калифорния.

НЕМНОГО ТЕХНИЧЕСКОГО

Приложение будет работать как на Android, так и на iOS (прелесть React Native). Вот как это будет выглядеть, когда мы закончим:

Мы добавляем лобби, где игроки могут присоединиться или создать комнату. Если игрок создает комнату, он становится ее создателем и ждет, пока другой игрок присоединится к его комнате.

Настроены имена игроков

ЧТОБЫ ПРОСМОТРЕТЬ ПОЛНЫЙ КОД, ПОСЕТИТЕ → https://github.com/yahayaohinoyi/ca-tico

Ссылка PlayStore → https://play.google.com/store/apps/details?id=com.caotica

Спасибо!