Здравствуй, стопгейм.
Хочу представить тебе кривую, с неудобным и некрасивым интерфейсом, багованую, но всё же свою игру.
Начну издалека. Когда-то очень-очень давно загорелся я желанием, проведя кучу времени в Red Alert 2, сделать свою стратегию. На удивление быстро поняв, что это, вообще-то, сложно, я начал клепать на старом добром Game Maker какие-то маленькие игрушки. Само собой принялось решение стать программистом. А после того, как я увидел Minecraft, был выбран язык — Java.
Джаву я учил и забрасывал. А потом осенило, и я начал пытаться делать что-то осмысленное. В итоге, совершенно случайно поиграв в Монстерру на айподе знакомого и увидев, что ни на ПК, ни на андроиде такого нет, я понял, что настало время первого относительно серьёзного проекта. Так TerraControl (сокращённо терка) и получился.
Смысл игры: есть поле, состоящее из разноцветных клеток. Есть два игрока (в планах расширение этого количества), у каждого — своя небольшая территория. Если цвет территории и прилежащих к ней клеток совпадает, то они присоединяются к ней. Игроки ходят попеременно, меняя цвета своих территорий. В итоге, выигрывает тот, кто захватил больше клеток.
1) Window size — размеры окна в пикселях
2) Level size — размеры уровня в клетках, только сервер и синглплеер
3) Address — IP сервера (первое окошко, только клиент), порт сервера (второе окошко, клиент и сервер)
4) Players — количество игроков, только сервер и синглплеер
5) Generator type — способ генерации уровня, только сервер и синглплеер
6) Randomizer seed — любой текст (берётся его хэш-сумма), который является основой для генератора псевдорандомных чисел (то же самое, что и сид в Minecraft). При вводе одинаковых сидов получаются одинаковые уровни, только сервер и синглплеер
7) End if captured 50% — заканчивать ли игру при захвате одним из игроков половины поля (победить другому уже невозможно)
8) Colors — цвета, используемые в игре, только сервер и синглплеер. Любое количество (меньше двух бессмысленно), шестнадцатеричный формат, разделяются пробелом. (ff0000 ff00ff ffff00 00ff00 00ffff 0000ff)
1) запускаем jar-файл
2) настраиваем
3) нажимаем Single player
1) для начала запускаем сам jar-файл
2) настраиваем
3) решаем, кто будет сервером, кто клиентами (если держащий сервер будет одним из игроков, то он должен запустить и клиент, и сервер)
4) нажимаем соответствующие кнопки (Client, Server)
Управление:
1) клик мышкой на цветной квадрат внизу — выбрать цвет и походить
2) колёсико мышки — приблизить/отдалить
3) стрелочки — пролистывание поля
Работает через хамачи (порт открывать не надо) и через внешний IP (порт открывать надо).
Скачать можно тут (по мере обновления ссылка остаётся та же).
Гитхаб, где можно посмотреть исходный код, чейнджлог по коммитам, а также написать о баге или даже форкнуть.
Лучшие комментарии
Почему так долго?
Сам чейнджлог смотрите под спойлером по коммитам, а я перечислю самое важное:
1) поддержка большого количества игроков (до максимального размера массива в Java)
2) более быстрая передача уровня, общее снижение количества трафика как минимум на 3 байта на сообщение
3) убран костыль-синглплеер, приделан нормальный синглплеер. Больше на занимает порт, не перекидывает сам себе уровень и не создаёт ничего лишнего и невидимого.
4) очень сильно перелопачен код, в основном в виде упрощений. Также создана основа для лёгкого добавления (но только через копание в коде) и выбора типа генератора уровня.
5) добавлено огромное количество комментариев к коду
Ура.
Или проблема в чём-то другом?
В терке появился синглплеер. Хотя он и является огромным, кривым костылём (создаётся невидимый сервер и второй невидимый клиент, но с другой логикой), он вроде бы работает. Протестирован он плохо, поэтому жду отзывов о том, как он работает.
Из ещё чего-то хорошего — появилась возможность оканчивать игру при захвате кем-то больше, чем половины поля. По умолчанию включено.
Вскоре собираюсь добавить синглплеер, а так же ограничение FPS, дабы не загружать весь процессор.
Сначала не было времени, потом желания, потом идей.
Что новенького:
1) теперь используется столько процессорного времени, сколько нужно на обновление и рендер уровня, остальное освобождено
2) для ходов сделаны кнопочки вместо кликов по полю
3) возможность использовать сиды для рандома
4) два новых генератора уровня, симметричный (генерирует левую верхнюю четверть, отражая её на всё остальное поле) и линейный (искажённые полосы вдоль горизонтали)
5) по окончанию игры всё поле, исключая победителей, затухает
Ну а ещё, естественно, различные фиксы и правки.