Дисклеимер : Вся информация указанная в данной статье не является идеальной и эталонной с точки зрения программирования. Информация предназначена для новичков, и носит сугубо ознакомительный характер.
В этой статье создадим простую игру, в которой надо собирать парные картинки.
Попутно будем считать количество ходов, для того чтобы выяснить кто пройдет за наиболее малое их количество.
Приступаем.
Игровое поле будет у нас 4х4. Итого 16 ячеек. Так как все картинки будут парные , то получается нам необходимо иметь 8 картинок + картинка закрытого состояния.
Размеры ячейки в моем случае будут равны 64х64.
В итоге я склеил все картинки в одну большую, размером 64х576.
Структура проекта и основная логика:
Основная сцена «main_scene» на которой рисуются все ячейки через код.
Отдельная сцена «cell».
На обоих сценах подвешен свой скрипт.
Скрипт из ячейки передает по клику свои данные в главную сцену. И запускает необходимые функции так же находящиеся в главной сцене.
Скрипт на главной сцене это всё обрабатывает и ведет все подсчеты.
Сцена и код сцены «cell».
Корневая нода Area2D, под ней спрайт , колижен шеип и плеер. С помощью него я сделал анимации открытия и закрытия картинки.
Почему спрайт я сделал портянкой — дело в том, что в годо можно использовать спрайтщит непосредственно в ноде Sprite. При этом через свойство frame обращаться к какому то кадру.
В будущем, номер кадра будет связываться с номером ячейки. Для синхронности. Но об этом ниже.
Код.
Тут в принципе нет ничего сложного.
id = номер ячейки
По этому же номеру мы включаем на спрайте нужный кадр.
Если у нас есть возможность кликать , то мы передаем в массивы на главной сцене имена и номера выбранных ячеек. И если сделано два клика и при этом номера разные , то запускаем в главной сцене функцию reset(). Если же номера одинаковые, то стартуем функцию dead().
Сцена и код сцены «main_scene».
На главной сцене у нас нода Label, для отрисовки количества ходов. Нода CELL служит нам «папкой» для всех ячеек.
Ну и Tween, для анимации когда у нас собраны две правильные ячейки.
Код.
Тут кода чуть больше, но поверьте ничего сложного тут нет.
Для начала мы строим через цикл все наши ячейки в папке CELL. Попутно задавая им номера по простой формуле — номер ячейки равен количеству нод в папке CELL.
Чтобы картинки были парными я создаём массив arr, который при старте просто перемешиваем при помощи функции shuffle().
После чего каждой новой ячейке передаём номер из этого массива по порядку.
Ну а в функциях reset() и dead(), мы либо закрывам не парные картинки , либо удаляем парные. В последнем случае я сделал анимацию скалирования через ноду Tween. Хотя конечно же тут можно обойтись и без этого. Просто планировалось что парные будут вылетать за пределы поля.
Ну и не забываем в функциях обнулять массивы для следующих выборок.
Это вобщем то и всё. Далее можно дописать завершение и рестарт игры когда на поле не осталось ячеек.
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, и вступайте в группу в ВК.
Удачи !
#godot #gdscript #игровой движок #программирование #годо