14

Симулятор бактерий

И еще немного покодив после незамеченных почти никем постов (да и исправив тучу косяков), слегка переделанное творение. @unrecovered призываю тебя тоже посмотреть.

Симулятор бактерий

Для начала краткое описание параметров:

FPS - сколько раз в секунду будет перерисована картинка.

Шаг симуляции - пауза между итерациями.

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

Шанс мутации - вероятность мутации в процентах.

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

Предел энергии - максимальное количество энергии которое может накопить клетка.

Зона размножения - зона в которой клетка может разделиться, но еще не умирает от переедания.

Расход энергии за действие - сколько энергии стоит каждое действие клетки (движение, обзор, поворот).

Сила атаки - сколько энергии отнимается при удачной атаке на клетку или теряется при неудачной.


Цвет выбирается в зависимости от количества мутаций разного рода.


Есть немного статистики и информация о клетке: ее поколение, количество мутаций (удлинение гена, сокращение и изменение) и собственно сам ген.


Действия которые может сделать клетка: расти, посмотреть, повернуться в одну сторону или другую, двинуться/атаковать и съесть трупик (если он там есть).


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

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


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


Исходники здесь: https://github.com/xfjgkss/GeneCells

А это прямая ссылка на скомпиленый файл:

https://github.com/xfjgkss/GeneCells/raw/master/out/artifact...

(Там jar файл для запуска которого нужна установленная Java SE Runtime Environment)

0
Автор поста оценил этот комментарий

Ну, я этой осенью поступаю на прикладную математику и информатику, о направлениях не знаю, хочу сначала побольше разобраться, если объективно, а если субъективно - то какой мальчишка не хочет поучаствовать в написании чего-то крутого, вроде игры? Сейчас цель разобраться со всеми азами и потом решить, куда идти.

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Массив классА клетка, то есть слово класс похоже на слово тип. Объявляя переменную мы просто показываем компилятору, что у нас есть такая то ссылка с таким именем. Ее нужно инициализировать, то есть присвоить ей какой то объект на который она будет ссылаться. Важно то, что разные ссылки могут указывать на один объект. Ссылка должна быть какого то класса, это указывает на какого типа объекты она может указывать (тут еще учитывается наследие классов). Создавая массив какого то класса он заполняется пустыми ссылками (в джаве null, а в паскале nil), и им нужно присвоить какое то значение, либо создав объект, либо присвоив какой нибудь существующий.

Вообще глянул синтаксис паскаля и он мне мозг ломает, джава нагляднее. Если не принципиально какой язык, то советую джавараш. Да и вообще лекции по теории посмотреть.

0
Автор поста оценил этот комментарий

Понятно, всё на классах сделано. В принципе, я сейчас тоже к этому иду, но ещё не разобрался с ними. Сложно для меня. Не знаешь хороших гайдов по ним?

Кстати я на pascalabc.net программирую, тоже очень годно и там вроде тоже есть всё, о чём ты говоришь

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

По классам в смысле ООП? На мой взгляд главное основной принцип уяснить, что все есть объект какого то класса, классы могут наследоваться и т.д. Это можно почитать где угодно, хоть в вики. Дальше хорошо бы узнать про очереди, различные массивы, деревья и т.д. То есть какие стандартные штуки есть для хранения данных, какие у каждой плюсы и минусы.

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

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

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

показать ответы
0
Автор поста оценил этот комментарий

Я новичок в программирование, поэтому из первых уст хочу узнать, а как сделать каждую клетку отдельным живым существом с наследованием и т д?

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У меня сделан класс Клетка в котором хранятся все характеристики этой клетки, называется он соответственно Cell. Храню я все данные в другом классе Cells, он статический, то есть не создаются объекты этого класса (на самом деле я забыл сделать приватным его конструктор, но в данном случае это не важно). У класса Cells есть инициализирующий метод init который принимает во входных параметрах размер поля и создает двумерный массив класса Cell и очередь. Сначала в центр добавляется одна клетка и ссылка на нее добавляется в очередь. Еще в классе Cells есть метод DoTick, в нем мы сначала смотрим сколько содержится клеток в очереди и затем в цикле достаем из начала очереди одну клетку и запускаем у нее метод act который возвращает true, если клетка остается живой, и false, если она умирает, если она жива, то добавляем ее в конец очереди.

Каждая клетка знает свои координаты, которые по совместительству являются ее расположением в массиве, и если она двигается, съедает другую клетку, разделяется или умирает, то попутно синхронизирует это действие с массивом cells в классе Cells. В этом массиве, если нет клетки по каким то координатам, то значение будет null (то есть нет ссылки ни на какой объект).

Хоть я и не знаю других языков, но мне кажется, что java для начала обучения программированию, а конкретнее со знакомством с ООП очень даже наглядна. Там за исключением примитивных типов int, char, float и т.д., все является объектом, и даже для примитивных типов есть обертки, так что можно их тоже сделать объектами. И синтаксис однозначен и неявного приведения типов нет. Так что если есть желание понять суть ООП, то познакомится с джавой будет полезно.

показать ответы
0
Автор поста оценил этот комментарий

А что скажешь об этом? http://pikabu.ru/story/simulyator_yevolyutsii_na_unity__iskh...

Мне кажется по виду получения энергии делать цвет реально удобнее.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Уже пробовал разделение на хищников и растений. http://rgho.st/7r96vFYFY

Мало динамики получается.

показать ответы
0
Автор поста оценил этот комментарий

А код сам придумал или рефакторил чей-то ?)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Почти все сам, только немного алгоритма подсмотрел у unrecovered'а. Все таки это не первая мини программка.

показать ответы
1
Автор поста оценил этот комментарий

Да, классно, тоже хочу что-то подобное написать, но пока что только набираюсь основ )

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасиб, я сам то только основы и знаю)

показать ответы
1
Автор поста оценил этот комментарий

Еще вопрос, источники света находятся в левом верхнем и правом нижнем квадранте? Просто они растут только там. Еще удалось вырастить кучу странных колоний при освещении 20. Прикольно, спасибо. Интересно оставить это, потом открыть и посмотреть.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, так и находятся. Мне показалось так интереснее, чем просто в центре. На 20ти кто то выжил, видимо с маленьким расходом?

показать ответы
0
Автор поста оценил этот комментарий

Как запустить такое? Можно совсем подробную инструкцию.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Нужна установленная java, часто она уже есть, но если нет, то скачать можно здесь

http://www.oracle.com/technetwork/java/javase/downloads/jre8...

И потом файл по второй ссылке запустится.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества