Сначала немного предыстории. Триггером стал просмотр видеоролика о дилемме заключённого — это фундаментальная задача в теории игр. Детали изложены в видеоролике, на который я настоятельно рекомендую обратить внимание.
Этот ролик напомнил мне о компьютерной игре «Жизнь» (англ. Game of Life) — клеточном автомате, который разработал английский математик Джон Конвей в 1970 году. Человек задает начальное состояние, а затем лишь наблюдает за его эволюцией. Для более подробного ознакомления с правилами и условиями советую прочесть статью на сайте «Википедия».
Мысленно наложив одну информацию на другую, очень захотелось написать собственный код программы и создать свой уникальный цифровой мир, где каждый пиксель обладает определенными свойствами и способен взаимодействовать с остальными. Запустив такой мир, можно наблюдать, как в нем развиваются, перемещается и взаимодействуют его обитатели.
Написание кода начал в Turbo Pascal, но быстро уперся в ограничения и возможности. Решил, что нужно освоить что-то новое. Выбор пал на популярный сейчас Python. Как результат – через неделю я уже написал код на игру и интерфейс на двух языках.
Обратите внимание, что видны четкие стадии развития, которые происходят циклически. Эти явления никак не прописаны в алгоритме. Однако, к своему удивлению, часто можно наблюдать развитие событий, которое может повторяться как в естественной природе, так и в истории человечества. Каждый может найти что-то для себя в этом процессе.
А в следующем видео я покажу возможности созданной игры.
Вот какую логику я заложил в свою версии игры.
Перед началом игры есть возможность выбрать количество пикселей, схему их расположения и силу при рождении. Сила у пикселя – это сколько шагов он может пройти до своего исчезновения. В ходе игры пиксель может увеличивать свою силу при сотрудничестве с остальными пикселями или при уничтожении соперника. Пиксель может взаимодействовать с другими пикселями, расположенными на восьми соседних клетках (сверху, снизу, слева, справа и по диагоналям). За один шаг считается перемещение пикселя на одну клетку вверх, вниз, влево, вправо или по диагоналям.
Во время игры происходит управление следующими возможностями (режимами) пикселей:
"Размножаться со своими" – если рядом с пикселем на соседней клетке есть пиксель того же цвета, то появляется новый пиксель того же цвета на соседней свободной клетке.
"Размножаться с чужими" – если рядом с пикселем на соседней клетке есть пиксель другого цвета, то появляется новый пиксель цветом как у первого на соседней свободной клетке.
"Сотрудничать со своими" – если рядом с пикселем на соседней клетке есть пиксель того же цвета, то у первого пикселя добавляется сила, равная двум шагам.
"Сотрудничать с чужими" – если рядом с пикселем на соседней клетке есть пиксель другого цвета, то у первого пикселя добавляется сила, равная двум шагам.
"Уничтожать соперника" – если рядом с пикселем на соседней клетке есть пиксель другого цвета, то второй пиксель исчезает.
"Выживает сильнейший" – если рядом с пикселем на соседней клетке есть второй пиксель другого цвета с меньшей силой, то второй пиксель исчезает. Если у второго силы больше, то исчезает первый.
"Забрать силу соперника" – при исчезновении пикселя его сила переходит победившему сопернику.
После написания кода встала задача сделать игру доступной. Для этого нужно было код на языке Python преобразовать в файл EXE. Я использовал для этого несколько способов:
1й способ. Командой "python -m PyInstaller --onefile --add-data 'images;images' --icon 'images/icon.ico' --noconsole file_21.py". Пробовал и с картинками и иконкой и без них вообще. Делал через разные IDE: Visual Studio Code и через PyCharm Community Edition 2023.3.5.
2й способ. Командой `auto-py-to-exe` через PowerShell.
Тестировал полученные файлы EXE на разных компьютерах и столкнулся с тем, что антивирусы на некоторых из них реагировали на файл EXE как на потенциальный троян. Первым делом я проверил свой компьютер несколькими антивирусами несколько раз – все было чисто. Затем начал искать информацию в интернете и выяснил, что это достаточно распространенная проблема. Причина в том, что Python — это интерпретируемый, а не компилируемый язык. То есть мой файл EXE – это самораспаковывающийся архив, содержащий интерпретатор и мой скрипт. Запуск кода, упакованного в исполняемый файл, ведет себя подобно тому, как ведут себя вирусы, что и вызывает подозрения у антивирусов.
Подробно я обсуждал это с более опытными программистами на известном в этой среде портале HABR.com.
ВНИМАНИЕ! Хочу предупредить, что существует вероятность того, что Ваш компьютер может выдать предупреждение о наличии вируса после скачивания игры. Причины я написал выше. Поэтому скачивать или нет – решайте сами, насильно принуждать я не буду. В любом случае вы всегда можете наблюдать за видеотрансляцией развития событий в игре «PIXEL LIFE» на канале YouTube и RuTube.
Запросить другие подробности алгоритма или заказать новый можно по E-mail: NukоlоvАV@yandeх.ru