|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.10.2011, 21:13 | #1 |
Новичок
Джуниор
Регистрация: 26.10.2011
Сообщений: 2
|
Симулятор Земли
Искал работу прогером (опыта нет,ток теория),скидывал резюмехи и вот прислали тестовое задание!
В силу последних событий у Меня складывается впечатление что в нынешнее время рождаются уже опытные и учить не кому не нужно(! Посоветуйте как реализовать проект который написан ниже? Спасибо за ранее! Необходимо создать симулятор планеты Земля. В один момент времени может происходить несколько событий - кто-то может рождаться, кто-то другой начинать драться. Симулятор должен отображать либо визуально происходящие на земле события либо "тупо" выводя информацию на консоль вида: собачка №2 и собачка №3 родили на свет человека #1 собачка №2 дерется с киборгом №8 собачка №2 убила киборга №8 собачка №2 питается его трупным мясом Планета представляет собой двумерную плоскость размером пицот на пицот пикселей. Первоначально БОГ создает Адама и Еву. Это две амебы. Амебы кормятся травкой, которая растет в рандомных местах. Самец амебы наевшись травки оплодотворяет самочку и у них на свет появится еще одна амебка. Дети каждого третьего поколения эволюционируют и превращаются в более продвинутый вид. Например, если 2 амебы 3 уровня спарятся - то на выходе получится малыш-одноклеточное 1 уровня. Это новое поколение существ. Если оно спарится с амебой - то получится амеба первого уровня. Если со своим видом - то ихний малыш тоже будет одноклеточным уже второго уровня. Стуктура существ такая: амеба одноклеточное бактерия рыбка собачка человек киборг ктулху Каждое существо является хищником и оно может питаться как травкой, так и другими существами, которые ниже данного на 2 и более вехи эволюции. К примеру ктулху питается всеми, а рыбка только амебами. У каждого существа есть параметры: 1 - скорость. Чем больше у существа скорость - тем оно быстрее ест траву, других существ и тем быстрее спаривается 2 - уровень жизни. Существа дерутся друг с другом - при каждом укусе у животного уменьшается уровень жизни на определнное количество единиц (зависит от способности "сила атаки" атакующего существа). Отправить снова Причем здесь C#? Перенес в свободное общение. На будущее: задавайте конкретные вопросы. Последний раз редактировалось alexBlack; 27.10.2011 в 23:30. |
28.10.2011, 02:40 | #2 |
Новичок
Джуниор
Регистрация: 26.10.2011
Сообщений: 2
|
При том
что реализовать нужно в C#
|
28.10.2011, 03:52 | #3 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
Могу поделится потоком сознания(неструктурированными, разрозненными мыслями), авось поможет:
У вас есть набор объектов разных классов. У каждого есть опыт, вернее скажем так, очки нужны для эволюционирования( по факту у вас 8 * 3 видов, амеба 1-го уровня, амеба 2-го уровня, амеба 3-го уровня ), эволюция происходит после каждого скрещивания. Как я понимаю две основных задачи этих существ - есть и размножатся. Делать и то и другое одновременно они не могут. Собственно про время, вся симуляция является бесконечным циклом, на каждой итерации которого, каждое существо принимает решение, что ему делать. Размножатся или есть. На этой просто концепции, на мой взгляд, вам и нужно построить свой симулятор. Либо в каждой итерации существо будет делать одно действие: перемещаться на N-клеток( в соответствии со своими характеристиками), размножатся или есть, при этом, на мой взгляд, рациональнее будет сделать так, что бы принятие решения было на каждой итерации, даже в случае простого перемещения к оптимальной цели, тогда это будет похоже на живых существ. Эдакие вороны - летели к ручью, увидели что-то золотистое и залетели в котел. По части скрещивания: эволюционируют естественно только потомки. То есть если встретились два объекта класса амеба 3-го уровня, они могут породить один объект класса одноклеточное. Для начала я бы порекомендовал вам разработать одно существо, способное принимать решения на основе оценки ситуации. Для упрощения можно допустить, что существо видит все поле. Есть два типа решений - глобальные и локальные. Глобальные - выбор цели, локальные - выбор пути достижения цели, конкретные действия. Существо выбирает себе глобальную цель в поле своей видимости. Допустим в 10 клетках находится еда, в 12 - самка. Присвоим каждом действию приоритет. 3 - размножение, 2 - питание, 1 - перемещение в произвольном направлении( в случае если объектов в поле зрения нет). Расстояние / приоритет = "расходы"/"цена" действия - чем ниже, тем выше вероятность того, что существо его совершит. В данном случае 5 для еды и 4 для размножения, соответственно существо выберет размножение. Это простейшая концепция, как это раздел называется, я честно говоря не помню, но это область ИИ в целом. Возможно от части это генетические алгоритмы, а от части Теория Игр.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
28.10.2011, 07:16 | #4 | |||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Цитата:
Я бы сделал проще - без всяких наследований (только это надо объяснить, скорее всего от тебя ждут чего-то навороченного). Кодируй каждое животное (и траву) цифрой 0 - трава, 1 - амеба (-1 бог ) и т.д. А так в основном по идеи Ivan_32. Касательно c# - я бы хранил всех в одном списке <TList> обрабатывал действия через кеш, чтобы была иллюзия, что все они действуют одновременно.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 28.10.2011 в 07:24. |
|||
28.10.2011, 08:24 | #5 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Лучше всего использовать самоадресуемые структуры и списковые деревья. В этом случае, очень легко определить, какие особи могут спариваться. Какие родители у вновь родившейся особи (дабы не допустить спаривания родителей и потомков). Легко определить, какая особь какую может есть и т.д.
Для вычисления расстояния между особями и пищей, в структуре должны юыть предусмотрены координаты данной особи на плоскости. Для организации спискового дерева используются два вида структур: Проходная структура: Указатель на следующую структуру того-же уровня; Указательна предыдущую структуру того-же уровня; Указатель на структуру родителя (нижний уровень); Указатель на структуру потомка (этот или более высокий уровень); И собственно структура животного: Указатель на проходную стуктуру этого уровня; Указатель на проходную структуру следующего уровня; Указатель на проходную структуру предыдущего уровня; Координата положения особи на плоскости X; Координата положения особи на плоскости Y; Ну и здесь описание всевозможных характеристик особи;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
28.10.2011, 10:02 | #6 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Код:
Так же я бы ввёл что-то типа тика процессора. На каждый тик обрабатываются все животные, которые в данный момент бездельничают и для них определяется действие. Всё потому, что по заданию: животные едят и размножаются с разной скоростью. Хотя, возможно, есть смысл всех животных обрабатывать и по необходимости менять им деятельность. А то, пока человек будет есть 10 ходов траву, его амёба загрызёт. |
|
28.10.2011, 10:31 | #7 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Итак, вкратце, что я думаю, по этому поводу:
Начните с симуляции питания. Животные разных видов имеют разный радиус обзора, у новых поколений он всё лучше и лучше (будем оптимистами и представим что угол обзора - квадрат). class LifeField будет регулировать появление class Food. Как только появляется трава - срабатывает событие, которое информирует все классы о том, что трава появилась по координатам (x,y), те животные, в пределах видимости которых находится эта точка - срываются туда, а кто не видит её - продолжают прочесывать местость. Патрулирование местости - вопрос более сложный. Тут надо себе его задать... Как бы я искал еду?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
|
28.10.2011, 10:39 | #8 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
28.10.2011, 12:38 | #9 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
|
28.10.2011, 13:15 | #10 | |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
Цитата:
2. Если найдена еда переход к П3, нет - к П5 3. Если еда в радиусе непосредственного доступа - едим, Конец алгоритма. Нет - переход к П4. 4. Еда вне зоны доступа - движение к ближайшему объекту еда. 5. Это самый сложный пункт, если вокруг нет никаких объектов, существо должно выбрать направлением либо по каким-нибудь косвенным параметрам либо совершенно рандомно. Можно еще допустить, что при таком стечении обстоятельств существо должно умереть, но живые организмы существа нерациональные, они будут бороться за свою жизнь не смотря ни на что. Такой мыслительный процесс должен происходить на каждой итерации цикла с каждым существом, тогда задачи всех существ будут оптимальными, так как при движении к одной цели могут обнаружится другие - более приоритетные.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Симулятор сисадмина | JTG | Свободное общение | 61 | 30.03.2011 20:41 |
Час Земли | Alex Cones | Свободное общение | 58 | 06.04.2010 10:43 |
Thorium project-симулятор цифровых схем. | Levsha100 | Софт | 8 | 06.12.2009 23:19 |
Симулятор web формы | Черничный | Работа с сетью в Delphi | 4 | 03.09.2008 08:38 |
Онлайн игра симулятор дальнобойщика | ТРИУМФ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 21 | 23.05.2008 19:20 |