Зацените java desktop игрушку

Всех можно научить самостоятельности, но им тогда не защитить свое место под солнцем. Поэтому они людей просто не учат самостоятельности и потом наживаются на этом.

(хорошо хоть оставляют возможность самостоятельно научиться самостоятельности)

И вот, им в пику, я сегодня закончил игру, которая учит основам самостоятельности и заодно отражает принципы устройства Вселенной.

sourceforge.net/projects/musib-cox

Скачать архив с игрой, распаковать и запустить mb.bat
Или в *nix запустите mb.jar
У вас должна быть jre

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини про геймдев.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Всем привет.
Срочно прошу ваших донатов.
Помогите заплатить мне за интернет.
Всего надо 500 гривен на карту 5363 5423 0798 8346.
Можно в складчину.
И я снова буду с вами. А то мне отключили. За неуплату.
А я тут новый алгоритм придумал. Хочу вам про него рассказать.
А потом вместе, кто быстрее, попробуем его написать.
Есть и другие идеи.

Кстати, поздравьте: на геймдеве нашлись заинтересованные в дальнейшем развитии игрушки.

Можно ли там грабить корованы?

Непонятна идея.
Во-первых, в чём проблема бессмертия одиночных пикселей? То есть чем пиксель меньше, тем жирнее его вероятность выжить среди крупных кластеров. Или у тебя в принципе объекты бессмертны? Да не похоже.

Кстати, а зачем ты делаешь окно рисования просто Canvas — создай полноценное окно JFrame и уже в нём Canvas. Так ты не упрёшься в границы, и сможешь дать пользователю рулить окошком. Повесишь слушатель на закрытие окна, чтобы выходить из приложения по этому событию.

Нафига ты детектируешь нажатие крысы в принипе не понятно, это ж ничего не меняет.

Для того, чтобы поменять два пикселя местами нужно детектировать два нажатия крысы.

Мышкой можно окошко драг энд дроп. Правой кнопкой можно копи фор сейв и лоад головоломки составленные тобой для других.
Что касается использования в исследовательских целях то тут масса возможностей но все они наверное останутся потенциальными. Я бы может и хотел промоделировать эволюционные процессы (цвета и формы — очень просто) но сделать это на пенсию мамы не представляется возможным. Будет финансирование — будет и развитие.

Кстати, вот такой херни без надобности не пиши, сейчас не 2000 год

      private String getValue(ArrayList<String> arr, String st, String std) {
    for (int i = 0; i < arr.size(); i++) {
      
      String s = (String)arr.get(i);
      String[] sa = s.split("=");
      if (sa[0].equals(st)) return sa[1]; 
    } 
    return std;
  }

Синтаксический сахар в Java для читабельности требует вот так:
for(String s:arr){ ... }
Как видишь, ничего лишнего при чтении.

В твоём случае нужно СРАЗУ делать Map на этапе прочтения конфига. Тогда и крайне неудобно названная getValue перестаёт быть нужна. ТОГДА ЖЕ заполни эту мапу дефолтными значениями, ещё до чтения конфига. Больше скажу, ПРОПИШИ этот конфиг отдельным текстовым файлом в проекте — так его удобнее править. А в коде будешь писать что-то вроде Settings.get("настройка") и всё.

Воткни куда-нибудь джуном, буду слушаться тебя как Бога.

Настройки рядом с mb.jar лежат в папке mb
Реализована необходимая возможность передать путь к настройкам через аргументы командной строки. Mаp не выбран из-за того, что пошла мода на упаковку и умолчания. И то и другое мешает мне понимать код. Ну и вот: если упаковка чистая — обратимая — то механизм преобразования настолько прост что его можно плагином реализовать — поменять одну форму кода на другую без изменения результата. Хочешь старый стиль — вот тебе старый стиль, хочешь новый, упакованный — перекодируй плагином и получи.
Но заказчик с деньгами рулит у меня. Если кто заплатит получит свою Map и все фишки.
Для себя и бесплатно я буду делать не просто просто, а совсем уж очень просто и понятно — то есть абсолютно свободно, а не так как диктуют правила. Кому надо тот переделает или наймет меня за деньги чтобы я переделал.

Map — это внутреннее представление. А уже как ты в конфиг пакуешь — это твоё дело.
Представь себе на минуточку, что у тебя этих настроек не 8, а 1000, для ровного счёта пусть 1024. Читабельность кода представляешь?

А теперь представь себе что у тебя есть 2 конфига: дефолтный, лежащий в общем архиве. И основной. Эти 2 файла похожи в дистрибутиве, но инсталлятор не заменяет существующий, или задаёт вопрос а нужно ли. В чём суть: ты СНАЧАЛА читаешь дефолтный, а затем основной. Соответственно, в основном практически все настройки закомменчены, а раскомменчивать их надо только там, где будешь менять.

В чём выгода: ты когда программишь, правишь настройки в конфиге, а не бегаешь по коду. Особенно полезно, когда таких настроек НЕСКОЛЬКО файлов. Например, под разные операционки. Локализация, опять же.

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

Такой класс, работающий с внешним файлом — настройки пользователя и внутренним файлом — дефолтные настройки — сам по себе красив.
Синглетон Hashtable за основу возьму?
И использую логгер для отслеживания исключительных ситуаций.
Вот только какой логгер взять?

Логгер — не более чем абстракция. Какой хочешь — такой и сделай. Здесь важен сам момент, ГДЕ ты сконцентрировал логику обработки посфактумной реакции на исключительные ситуации. Соответственно, здесь и только здесь решаешь, что писать, что не писать, а во что рыбу заворачивали.

Возьми за основу что хочешь, вопрос лишь в удобстве пользования. А зачем ему синглтон я не понимаю, когда всё сводится к одной переменной с доступом public static и соответственно вызовом конструктора на этапе декларации.

А вот КЛАСС где будет лежать твой логгер, настройки, и прочая лабудень — да, синглтон. Но нужно ли делать его синглтоном на уровне программирования? Я б не стал, если это не кусок более крупного программного пакета. Если программа маленькая, ДОСТАТОЧНО просто проинициализировать этот класс в какой-то момент, например при запуске программы — сначала внутренним файлом настроек, потом внешним, потом опциями командной строки.

Типичный случай: двуязычие программы. Ты сначала инициализируешь дефолтным языком, чтобы не проверять что все строки на месте. А уже потом переводом локального языка — где могут быть не все строки, но программа от этого не должна падать, просто покажет часть строк на английском. Особенно полезно когда перевод пишешь не ты.

ПОЧЕМУ выгодно static для читаемости кода? Да потому что ты не пишешь.

v = MySuperSoftina.getEnvironment().getInstance().getSettings().get("настройка");
Ты пишешь в начале класса
import static ua.com.dorozhko.MySuperSoftina.Environment.settings;
ещё вероятнее
import static ua.com.dorozhko.MySuperSoftina.Environment.*;
А в коде это выглядит так
v=settings.get("настройка");

АКЦЕНТ: я так понимаю, ты этот код будешь кому-то демонстрировать в портфолио. Потому он должен быть удобочитаемым. А вот в комментах к методам и классам можешь не скупиться, только не пиши про Вселенную, и не на русском.

Кстати, с опциями командной строки играйся в последнюю очередь, это нужно по сути только консольным утилитам, или полным автоматам — которые пишутся в скрипты и работают без участия человека.

В твоём же случае сделаешь диалог конфигурации.
Кстати, я не просто так рекомендовал делать полноценное окно. Туда можно честное меню добавить.

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

Кстати, у Java есть не только свой диалог открытия файла, а ещё и можно вызвать нативный диалог операционки. Обычно он куда лояльнее воспринимается, чем убожище Java.

PS. Ты не написал документацию к программе. Если будешь писать действительно интересные вещи, на такой мелочи рискуешь потерять первых пользователей. Они просто не поймут что к чему зачем, и чего надо творить.

P.S.
С документацией так и задумано было. Это стресс в области лишения контроля. Можно ведь легко и просто отыскать, как переставить две клетки, почему иногда они переставляются, а иногда нет. Как открыть контекстное меню. Как в файле настроек поменять количество цветов на игровом поле. Или количество клеток по горизонтали. Или высоту этих клеток.
Почему тогда люди возмущаются что я им не сделал хорошо?
Я не хотел им делать хорошо, я хотел вывести их из зоны комфорта, показать, что их желание заполучить себе командира из создателя апликухи просто заоблачное (и потом зависеть от его прихотей).
Сначала
— Кири, дай мне то, Кири, дай мне это.
Потом
— Кири, не продавай мою почку!
Видишь, чем может закончится привычка пользователя получить мясо уже разжеванное и политое необходимыми для более быстрого усвоения ферментами? (ускорение продаж гамбургеров )
Игра задумывалась как загадка управления, ее надо разгадать, надо понять, как она открывается, как работает.

Вот скажи, почему тебя напрягло не_знание что надо делать в игре.
Квесты ведь заводят игроков в такие ситуации специально.

Игра как китайская головоломка — шкатулка — не всякий квадратик щелкнет
(эх, я забыл звуки встроить :( )

Когда-то играл в кингс баунти — правил в hex сэйв файл получал 100 драконов или 100 500 денег. Все сам отыскивал — все виды ачива. А таким вот макаром — заполнял наугад пару-тройку байт в конце файла 17 и искал где двадцать три в игре появится (когда — если она запускалась).

Еще раньше — купили мне компьютер — но игры мама забыла на них купить. Кассету с играми магнитофонными. Но не забыла другую кассету — с учебными примерами бейсик фокал
Мое горе сменилось радостью когда я стал программировать игры для БК 0010 самостоятельно :)

В квесте есть понимание, КАКАЯ конечная цель игры или конкретной ситуации. Здесь такой цели нет.

Мне не составило труда выиграть, заменив один из коэффициентов на 1. Разумеется, так и не поняв что это за настройка — описания ты не оставил. Кстати, на отрицательное число реагирует весьма своеобразно. А вот почему не воспринимает дробных чисел — моя твоя не понимать.

В игре есть правила обмена — не всякие квадраты можно местами поменять.
И эти правила цель определяют

и это очень важно так как я и хотел промоделировать определители для размытых / квантовых / неопределенных ситуаций / состояний / значений

То есть начав переставлять ты увидишь стремление к некоей цели.
И вот это для меня было как открытие — стоит только на случайный набор нацепить правило и происходит упорядочивание с вырисовыванием цели — некоего устойчивого конечного состояния или стремления.
Цель сортировка. Видел бы ты бардак в моей комнате :)
Но я научился иногда его очень быстро упорядочивать.
И в игрушку я именно этот алгоритм упорядочивания запихнул. Более того, сделав его пошаговым, вплоть до обмена двумя пикселями . То что видим в начале, при запуске это работа алгоритма в течение некоторого количества шагов.
А потом я останавливаю алгоритм и предлагаю игроку продолжить складывать пиксели в кластеры до тех пор пока всего один большой кластер каждого цвета не останется. Это процесс коагуляции, свертывания молока, например.
Это удивительно, согласись.

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

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

Кстати, скруглить края блокам или кластерам — не хочешь? Лучше кластерам. Выглядит эффектнее. А если они имеют больший вес — придай им объём при помощи тени и подними выше. Маджонг видел? Вот так же. Только вероятнее всего глубину придётся делать отрицательной — как бы гравитация будет, чтобы более крупные поглощали более мелкие. Добавишь в будущем эффект перетекания — и будет понтовая игруля в портфолио, выставишь в онлайне.

Цель сортировка. Видел бы ты бардак в моей комнате :)

Что-то мне подсказывает, что теперь — видел.

Алексей, то, что только что увидел это уже была твоя игра.
Вот прямо когда ты писал свой комментарий — ты увидел будущее. Одно из возможных. Только почему ты считаешь что ты увидел мою реализацию?
Я абсолютно не против если ты сделаешь свою собственную. И будет у тебя понтовая собственная игруля.
Тут два тренда соперничают: мой и общепринятный.
Общепринято — показывать сложность проделанного труда.
А у меня все просто — сделать сможет каждый, на коленке собрать.
И это моя цель как дауншифтера — научить всех делать все для себя самостоятельно. Прогресс массовых производств гибелен для планеты.
И более того: понимаешь массовость это и есть коагуляция.
Так что теперь моя игрушка уже что-то другое моделирует.
Кстати, коагуляция крови в организме приводит к смерти.
Потому что перестает кровь выполнять функцию разносчика кислорода и фагоцитов (например)
Я хочу чтобы каждый задумался, что это очень плохо заставлять всех кругом делать для него вообще все и всего лишь за то, что он для них пишет код на java.

Это не «моя игра», а минимальный порог, на котором ты получишь игроков. Хотя бы минут на 20-30.

Для себя самостоятельно — это устарело лет на 1700. И если это твой выбор, то сожрёт тебя экономическая машина, и быстрее чем ты можешь предположить. Делаешь игры — добро пожаловать в поведенческую психологию. Ровно до тех пор пока микроплатежи не добавишь — тогда враг народа

Она уже меня жрет. И все завязки основаны на том, что она навязывает мне ненужные мне покупки. Так что я не покупаю. Да мне и не за что покупать. Более того у меня долги. Я ухаживаю за больной матерью, но никто не чешется мне за это платить а ведь я вроде соц. работника получаюсь. Любые блага можно взять напрокат, или когда кто-либо с тобой поделится ими просто чтобы похвастать. Частное владение чем-либо это выдумка ради прибыли. Наш мир выдуман чуть больше чем полностью.
Еще про частное владение — вот вопрос — а кто будет ремонтировать, но разве поломка кода не является баг хаунтингом? Тогда почему обнаружение слабого места вещи никак не вознаграждается? Вот и ответ — кто заплатит.
И далее, про интеграл использования и владения.
Один вещь приобрел ради подражания, а другой ради использования. Один закинул книгу на полку, а другой каждый день штудирует. Кто из собственник, а кто думает что он собственник?
Денежное обращение (в условиях недостатка денег в экономической системе) это причина той задницы в которой мы живем.
И вот еще — насчет мифа о том, что выживают наиболее приспособленные. Так и есть, но кто выживает? Правильный ответ — паразиты. Именно паразиты — посредники — формируют слои организмов . В том числе и социального.
Так зачем мы осуждаем паразитов? Или превозносим дарвинизм этот?

Я так и сказал. Но с такой философией далеко не уедешь — ты же не собираешься вклиниваться в игру сильных мира сего на триллионы баксов?

Ну так будь проще, играй с теми, кому ты можешь понравиться. Не философией, а продуктом. И играй по их правилам поведенческой психологии, которые уж нескоро изменятся.

Нет журавля в небе — учись готовить синицу. А вдруг у тебя и выйдет что на кшталт 2048 :)

>>>

ты же не собираешься вклиниваться в игру сильных мира сего на триллионы баксов?

<<<

Я работаю над этим.


Одна из полезностей игры в том что игрок самостоятельно
методом тыка определяет все(!) ее правила.
Я даже подумывал о генерации разных наборов правил для разных цветовых решений — это будет вообще пиршество для ума!
Вот видео на котором я показываю правильные — когда обмен происходит и неправильные — когда я мышкой перечеркиваю — выборы.
Посмотри и поймешь.
Важно когда ты сам догадываешься, а не кто-то тебе разжевывает.
Если нет, то завтра объясню.

игрок самостоятельно
методом тыка определяет все(!) ее правила

У тебя нет бюджета Netflix чтобы писать Bandersnatch

Одно из правил, которым люди пользуются неявно: ИГНОРИРУЙ херню. Мозг отсеивает то что видит. Можешь проверить.

Прекрасный стиль именования переменных. Не оценят, точно говорю.
int qcf = this.model.getClustersByPointAndColor(p, this.model.getCellColor(p)).size();
int[][][] state = this.model.getCurrentState();

Да и за System.out в продакшене тоже по головке не погладят.

Я логгеры ненавижу еще с тех времен, когда меня заставляли их использовать. Когда после университета я работал три месяца в Днепропетровске, на фирме Миллион, еще не зная о своей болезни и ее возможностях и особенностях. А сейчас я могу запрограммировать свою шизу.

Да хватит свою шизу рекламировать, ты даже не знаешь что это такое. Было бы что серьёзное, а так... мелкое отклонение, помноженное на недостаток опыта.

Тебя не спрашивают что ты любишь. Логгеры есть стандарт де-юре, и даже если этот по итогу System.out — то об этом должен знать только класс логера или класс откуда он инициализируется. В одном месте. Не в сотне.

Да, в твоём случае логика понятна — ты тестируешь приложение. Но в продакшене так не делают. А опционируют окно, в который выводят лог. Ничего особо сложного. System.out проблемен уже тем, что он используется для мониторинга внешним приложением, которое вызвало твоё, и его содержимое в общем случае может попадать в системные логи. Угадай, что будет когда там окажутся конфиденциальные данные, идентификаторы каких-нибудь сессий?
Сейчас это можешь НЕ менять, но поставь на карандаш что поменять стоит — просто для того чтобы самому научиться, как кошерно следить за своим приложением.

Я вообще не вижу причины кидать данные в лог. Создай в окне несколько лэйбочек и кидай в них. А можешь написать прямо по холсту, выделив снизу строчку (и не забыв закрасить перед новой записью)

Имя мне — легион. По крайней мере, я себя так чувствую. Вот примерно так я готовлю чай: вижу себя бросающим сахар и кладущим заварку и наливающим холодную воду и снимающего с самодельной электроплитки уже закипевшую и выходящим к заваривающемуся чаю. Параллельная обработка кадров. Каждый кадр это свой момент времени. Я рекламирую вот эту карусель с данными, с информацией, я к этому хочу привлечь внимание. Data processing. Меня много в каждой секунде настоящего и мне приходится выбирать кому отдать управление, кто ближе всего к настоящему моменту. Я во времени не точка а размытое пятно. И кстати, обнаружена корреляция — почему фантасты пишут что машина на большой скорости превращается в размытое пятно. Так у меня что тоже скорость жизни большая?

С плохим концом? Или с очень плохим концом? Или с плохим концом, но все будут смеяться?

Одна неординарная личность замечает (в силу особенностей восприятия) некоторый эффект и просит другую неординарную личность запрограммировать этот эффект.
А эффект такой:
Играю я значит в Герои 3 (это личность рассказывает) и трудная миссия запредельно. Как проходить? И тут я включаю машину времени со словами: «Раз они со мной нечестно, я тоже с ними буду нечестно.» Почему они со мной нечестно? Не учли мои ограниченные способности (я выбрал самый слабый уровень в игре но все равно не могу пройти миссию)
Почему я с ними нечестно? Ну машина времени это очень нечестная штука.
В Героях есть таймер — недели и дни. И есть возможность сохранять подписанные saves. У меня есть возможность взять ватман и разрисовать схему путей по времени. Хотя нет, это слишком сложно для тебя, мой юный падаван.
Вот описание более простое (раз ты хочешь от меня простоты):
Я нахожусь на карте в точке икс игрек и у меня восемь различных вариантов куда пойти. Я записываюсь и хожу. Если меня убивают, я загружаюсь и хожу в другом направлении. И так пока не дохожу до такой точки где могу записаться снова. Если я захожу в тупик — точку из которой не могу никуда пойти, но в ней я записан, я загружаюсь из точки тактом раньше. Или двумя тактами — неделями, двумя сейвами раньше.
Я летаю по времени, перемещаюсь до тех пор, пока не спланирую маршрут успешного прохождения миссии — если такой существует. И тем самым натягиваю нос разработчику который плевал на то какой я есть (хотя майкрософт не плюет на людей с ослабленным зрением)
А вот меня общество подвергло остракизму за умение переставлять слова а посему видеть предложения в нескольких вариантах одновременно.

Ура! Выиграл 300 долларов. Как получить выигрыш?

Прошел не скачивая. Отличная игра.

Докажи что прошел. Покажи финальный скриншот.

Отправляю мыслеграммой

А ты встрой лутбоксы

Отличная идея. То-то месилово начнется.

Да, кстати, а вы заметили как работает поверхностное натяжение?
Капиллярные явления?
Силы гравитационного воздействия как проявляются?

Кстати:
Я могу написать под андроид более удобную версию — может быть даже с подчетом времени сборки — определением выиграл игрок или проиграл после хода, ведением статистики побед.
Но без достаточного, вменяемого, финансирования этот процесс займет много времени.
Кроме того, у меня есть и другие игры, их также можно представить и в таком формате и под андроид и под айфон.
Но снова все упирается в тот факт, что чем больше будет моя зарплата в месяц по этим проектам тем с большей скоростью получится писать и дописывать и переписывать все мои игры (штук пять) и исправлять в них баги.

Я джва года ждал такую игру.

как играть то в это? на маке открылся квадрат с кучей маленьких разноцветных квадратиков внутри

на маке открылся квадрат с кучей маленьких разноцветных квадратиков внутри

Значит ты выиграл %)

УРА! Где я могу забрать свои выигрыш? Или сначала нужно перевести деньги на карту?

Или сначала нужно перевести деньги на карту?

А говоришь не знаешь, как играть в это! %)

Нет, что вы. Отправьте номер карты, дату и cvv. Вам пришлёт миллион нигерийский принц.

Вообще-то ты должен сам для себя определить правила этой игры.
Я не навязываю тебе собственного видения выигрышного или проигрышного поведения.
Никакой стрельбы, никаких покупок.

Игра сделала тебя победителем. Не думаю, что слот машина или рулетка на такое способны. Эта игра освобождает от игровой зависимости, а не прививает ее.

Совет: нарисуй коровку посреди каждого квадратика. Спросят тебя — а как же корованы — а вот они!

Вот. Не совсем коровки правда, но если включить воображение можно увидеть рожки да ножки. giprozhorka.space/pazzl

Похоже, хабраэффект
This page is blocked by service provider

Нет. Деньги на хостинге закончились.

Підписатись на коментарі