Найти тему
Игровой движок Godot engine

№106. Создаем игру «парные картинки».

Дисклеимер : Вся информация указанная в данной статье не является идеальной и эталонной с точки зрения программирования. Информация предназначена для новичков, и носит сугубо ознакомительный характер.

В этой статье создадим простую игру, в которой надо собирать парные картинки.

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

Приступаем.

Игровое поле будет у нас 4х4. Итого 16 ячеек. Так как все картинки будут парные , то получается нам необходимо иметь 8 картинок + картинка закрытого состояния.
Размеры ячейки в моем случае будут равны 64х64.

В итоге я склеил все картинки в одну большую, размером 64х576.

-2

Структура проекта и основная логика:

Основная сцена «main_scene» на которой рисуются все ячейки через код.
Отдельная сцена «cell».
На обоих сценах подвешен свой скрипт.

Скрипт из ячейки передает по клику свои данные в главную сцену. И запускает необходимые функции так же находящиеся в главной сцене.
Скрипт на главной сцене это всё обрабатывает и ведет все подсчеты.

Сцена и код сцены «cell».

Корневая нода Area2D, под ней спрайт , колижен шеип и плеер. С помощью него я сделал анимации открытия и закрытия картинки.

-3

Почему спрайт я сделал портянкой — дело в том, что в годо можно использовать спрайтщит непосредственно в ноде Sprite. При этом через свойство frame обращаться к какому то кадру.
В будущем, номер кадра будет связываться с номером ячейки. Для синхронности. Но об этом ниже.

-4

Код.
Тут в принципе нет ничего сложного.

id = номер ячейки
По этому же номеру мы включаем на спрайте нужный кадр.

Если у нас есть возможность кликать , то мы передаем в массивы на главной сцене имена и номера выбранных ячеек. И если сделано два клика и при этом номера разные , то запускаем в главной сцене функцию reset(). Если же номера одинаковые, то стартуем функцию dead().

-5

Сцена и код сцены «main_scene».

На главной сцене у нас нода Label, для отрисовки количества ходов. Нода CELL служит нам «папкой» для всех ячеек.
Ну и Tween, для анимации когда у нас собраны две правильные ячейки.

-6

Код.

-7

Тут кода чуть больше, но поверьте ничего сложного тут нет.

Для начала мы строим через цикл все наши ячейки в папке CELL. Попутно задавая им номера по простой формуле — номер ячейки равен количеству нод в папке CELL.
Чтобы картинки были парными я создаём массив
arr, который при старте просто перемешиваем при помощи функции shuffle().
После чего каждой новой ячейке передаём номер из этого массива по порядку.

Ну а в функциях reset() и dead(), мы либо закрывам не парные картинки , либо удаляем парные. В последнем случае я сделал анимацию скалирования через ноду Tween. Хотя конечно же тут можно обойтись и без этого. Просто планировалось что парные будут вылетать за пределы поля.

Ну и не забываем в функциях обнулять массивы для следующих выборок.

Это вобщем то и всё. Далее можно дописать завершение и рестарт игры когда на поле не осталось ячеек.

Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, и
вступайте в группу в ВК.
Удачи !

#godot #gdscript #игровой движок #программирование #годо