За VR-играми: крестики-нолики

Теперь, когда я думаю об этом, игры с бумагой и карандашом были моим детством. У меня до сих пор есть записные книжки, набитые точками, квадратами и картинками. Но если была одна игра, в которую 6-летней Эйлин понравилось играть больше всего, то это были крестики-нолики (не спрашивайте меня, почему).

Так что может быть лучше, чем превратить мою ранее любимую игру в захватывающую виртуальную реальность?

Игра работает аналогично классической версии и была запрограммирована в Unity, а визуальные эффекты и 3D-дизайн были созданы в Blender. Действие игры происходит в парке (потому что мы должны проводить больше времени, наслаждаясь окружающей средой), где игрок сидит за столом для пикника в окружении деревьев и зелени.

Играя в этой версии, вы можете либо щелкнуть триггер на гарнитуре Google Cardboard, чтобы поместить фигуру «X» на доску, либо нажать клавишу пробела на своем компьютере (компьютер использует Os, а игрок - X). Смотрите видео ниже, чтобы узнать о игровом процессе:

Как работает игра:

  1. Размещение X частей

Как упоминалось ранее, вы должны нажать кнопку на гарнитуре виртуальной реальности или компьютере, чтобы разместить элемент на доске, но приведенный выше код работает только для компьютера, поэтому вам придется заменить Input.GetKeyDown («пробел») с Gvr.Viewer.Instance.Triggered для гарнитур VR .

Итак, как компьютер узнает, в каком пространстве вы хотите разместить этот кусок? * предупреждение о спойлере: это не волшебство

Чтобы выбрать место для размещения вашей фишки, игра определяет ваше поле зрения или Raycast, который отображается на экране в виде точки. Если в этом месте уже есть кусок, ничего не произойдет. С другой стороны, если там ничего нет и игра еще не закончена, программа запускает метод PlayerSelect (см. Ниже).

Хотя большая часть приведенного выше кода довольно очевидна и заставляет X появляться на экране, есть одна переменная, о которой важно помнить; чтобы помочь компьютеру обнаружить, что находится в каждой точке, каждому X-элементу присваивается значение 1, чтобы его можно было идентифицировать, пустым точкам присваивается значение 0 и пробелам с O-образной фигурой присваивается значение 2, которое будет полезно при определении того, кто выиграл игру.

2. Выбор компьютера

Итак, теперь, когда мы можем расставлять свои фигуры на доске, важно, чтобы компьютер имел свою очередь! Приведенный выше код предназначен для метода PickRandomPiece, который по существу выбирает случайное пустое место для размещения буквы «О».

Да, вы правильно прочитали. Компьютер случайным образом выбирает место для размещения буквы «О». Хотя мне жаль, что я не смог включить ИИ в эту игру, чтобы увеличить сложность, возможно, это будет еще один проект на будущее!

При этом, как компьютер случайным образом выбирает место для своего следующего хода? * предупреждение о спойлере №2: это не волшебство

В коде я создал массив под названием piece, в котором всего 9 чисел (от 0 до 8), каждое из которых назначено на отдельное место на доске. После каждого хода компьютер должен генерировать случайные числа до тех пор, пока число не совпадет с пустым местом на доске и не будет поставлена ​​буква «О».

3. Проверка на наличие трех частей подряд

В этой игре есть 3 разных исхода; победа, поражение или ничья. Хотя было бы здорово запрограммировать его так, чтобы игрок все время выигрывал (почему бы и нет), через некоторое время это станет довольно скучным. Таким образом, чтобы определить, выиграл ли кто-то игру, нам нужно запрограммировать горизонтальную проверку и вертикальную проверку для трех фигур подряд.

Горизонтальная проверка:

Когда мы смотрим на сетку крестиков-ноликов, мы в основном смотрим на квадрат 3 на 3. Таким образом, при горизонтальной проверке каждый ряд этого квадрата проверяется на наличие трех одинаковых частей. Переменная y проверяет разные строки, а переменная x проверяет разные квадраты в каждой строке.

Здесь вступает в игру предыдущее примечание о стоимости различных фигур в крестики-нолики (помните, что каждому элементу X присваивается значение 1, пустым точкам присваивается значение 0, а пробелам - 0- штуке присваивается значение 2). Если все квадраты в строке имеют одинаковое значение, тогда переменная соответствует равна 3, и будет выполняться другая часть кода. Однако, если горизонтальная проверка выполняется и совпадений не равно 3, то игра будет продолжаться как обычно, пока кто-то не выиграет или поле не будет заполнено.

Вертикальная проверка:

Забавный факт: код точно такой же, как и при горизонтальной проверке, но с одним отличием → теперь части проверяются по столбцам, а не по строкам, что выполняется заменой x и y в уравнении, используемом, чтобы показать, какие элементы нужно проверить.

Вот и все. Здесь применимы та же логика и правила; если в столбце три фишки с одинаковым значением, переменная соответствует трем и кто-то выигрывает игру.

4. Победа в игре

Как только переменная соответствует становится равной 3, программа должна проверить, какой игрок выиграл игру. Если фигуры были крестиком (со значением 1), то игрок выигрывает игру и текст «Вы выигрываете!» отображается на экране.

С другой стороны, если программа обнаруживает, что фигуры были О, она отображает «Вы проиграли!» на экране (a̶n̶d̶ ̶s̶h̶a̶k̶e̶s̶ ̶i̶t̶s̶ ̶h̶e̶a̶d̶ ̶i̶n̶ ̶d̶i̶s̶a̶p̶p̶o̶i̶n̶t̶m̶e̶n̶t̶).

Но что будет, если будет ничья? Или, что более важно, как программа может определить наличие ничьей?

Не волнуйся, я тебя прикрыл. В методе PickRandomPiece появляется переменная tieCheck.

В любой обычной игре в крестики-нолики, когда происходит ничья, все клетки на доске заполняются. Таким образом, tieCheck должен подсчитать количество заполненных полей на доске. Когда это число равно 9 и в ряду нет 3 одинаковых фигур, появляется сообщение «Ничья!» появляется на экране, и игра заканчивается.

5. Перезапуск игры

Итак, теперь, когда мы можем выигрывать / проигрывать, нам нужно запрограммировать что-то, что позволит нам переигрывать игру столько раз, сколько мы захотим (в конце концов, 6-летняя Эйлин играла в эту игру более ста раз).

Если логическое значение isGameOver истинно и игра заканчивается, игрок становится заблокированным и больше не может двигаться или взаимодействовать с окружающей средой. Однако, что еще более важно, появляется переменная resetTimer, которая заставляет игрока ждать 3 секунды, прежде чем он перезапустит игру.

Однако, если isGameOver ложно, текст «Обыграй компьютер!» отображается на экране как постоянное напоминание для игрока. И вуаля, мы практически выучили весь важный код, который стоит за этой игрой!

3D-дизайн с помощью Blender

Для визуального аспекта и дизайна игры я использовал программное обеспечение под названием Blender, которое представляет собой набор инструментов для трехмерной компьютерной графики с открытым исходным кодом, используемый для создания анимационных фильмов, визуальных эффектов, искусства, трехмерных печатных моделей и т. Д. интерактивные 3D-приложения и видеоигры.

С помощью этого инструмента я смог создать дизайн доски для игры в крестики-нолики и декорации игры, включая деревья, стол для пикника и травяной пейзаж. Это также сделало все более реалистичным по сравнению с ранее ярко-оранжевым столом, который я использовал до того, как добавил 3D-дизайн.

Итак, с помощью Unity и Blender 6-летняя Эйлин теперь может исполнить свое желание постоянно играть в крестики-нолики, но в виртуальной реальности !! И теперь, когда вы знаете, как работает код игры, вы также можете запрограммировать эту игру для себя :)

Если вы хотите узнать больше об игре, посмотрите видео ниже:

Если вам понравилась эта статья, пожалуйста, похлопайте по ней! Следуйте за мной в LinkedIn или посетите мой личный сайт, чтобы узнать больше о других проектах, которые я реализовал в прошлом!

Наконец, если у вас есть конструктивная критика или отзыв, обязательно оставьте комментарий ниже! Я хотел бы узнать, как улучшить свои статьи / стиль написания :)

📝 Прочтите этот рассказ позже в Журнале.

🗞 Просыпайтесь каждое воскресенье утром и слышите самые интересные истории, мнения и новости недели, ожидающие в вашем почтовом ящике: Получите заслуживающий внимания информационный бюллетень›