Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 27.10.2011, 21:13   #1
VlS81
Новичок
Джуниор
 
Регистрация: 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.
VlS81 вне форума Ответить с цитированием
Старый 28.10.2011, 02:40   #2
VlS81
Новичок
Джуниор
 
Регистрация: 26.10.2011
Сообщений: 2
По умолчанию При том

что реализовать нужно в C#
VlS81 вне форума Ответить с цитированием
Старый 28.10.2011, 03:52   #3
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Могу поделится потоком сознания(неструктурированными, разрозненными мыслями), авось поможет:
У вас есть набор объектов разных классов. У каждого есть опыт, вернее скажем так, очки нужны для эволюционирования( по факту у вас 8 * 3 видов, амеба 1-го уровня, амеба 2-го уровня, амеба 3-го уровня ), эволюция происходит после каждого скрещивания.

Как я понимаю две основных задачи этих существ - есть и размножатся. Делать и то и другое одновременно они не могут.

Собственно про время, вся симуляция является бесконечным циклом, на каждой итерации которого, каждое существо принимает решение, что ему делать. Размножатся или есть. На этой просто концепции, на мой взгляд, вам и нужно построить свой симулятор. Либо в каждой итерации существо будет делать одно действие: перемещаться на N-клеток( в соответствии со своими характеристиками), размножатся или есть, при этом, на мой взгляд, рациональнее будет сделать так, что бы принятие решения было на каждой итерации, даже в случае простого перемещения к оптимальной цели, тогда это будет похоже на живых существ. Эдакие вороны - летели к ручью, увидели что-то золотистое и залетели в котел.

По части скрещивания: эволюционируют естественно только потомки. То есть если встретились два объекта класса амеба 3-го уровня, они могут породить один объект класса одноклеточное.

Для начала я бы порекомендовал вам разработать одно существо, способное принимать решения на основе оценки ситуации. Для упрощения можно допустить, что существо видит все поле. Есть два типа решений - глобальные и локальные. Глобальные - выбор цели, локальные - выбор пути достижения цели, конкретные действия. Существо выбирает себе глобальную цель в поле своей видимости. Допустим в 10 клетках находится еда, в 12 - самка. Присвоим каждом действию приоритет. 3 - размножение, 2 - питание, 1 - перемещение в произвольном направлении( в случае если объектов в поле зрения нет). Расстояние / приоритет = "расходы"/"цена" действия - чем ниже, тем выше вероятность того, что существо его совершит. В данном случае 5 для еды и 4 для размножения, соответственно существо выберет размножение.

Это простейшая концепция, как это раздел называется, я честно говоря не помню, но это область ИИ в целом. Возможно от части это генетические алгоритмы, а от части Теория Игр.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 28.10.2011, 07:16   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,305
По умолчанию

Цитата:
Первоначально БОГ создает Адама и Еву. Это две амебы. Амебы кормятся травкой, которая растет в рандомных местах.
Если первоначально, то откуда трава ? Или она еще до бога с Афганистана?

Цитата:
Если со своим видом - то ихний малыш тоже будет одноклеточным уже второго уровня
Разные виды не могут скрещиваться между собой .

Цитата:
Каждое существо является хищником и оно может питаться как травкой, так и другими существами
Такие существа называются всеядными, а не хищниками.

Я бы сделал проще - без всяких наследований (только это надо объяснить, скорее всего от тебя ждут чего-то навороченного). Кодируй каждое животное (и траву) цифрой 0 - трава, 1 - амеба (-1 бог ) и т.д. А так в основном по идеи Ivan_32.
Касательно c# - я бы хранил всех в одном списке <TList> обрабатывал действия через кеш, чтобы была иллюзия, что все они действуют одновременно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 28.10.2011 в 07:24.
Utkin вне форума Ответить с цитированием
Старый 28.10.2011, 08:24   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,947
По умолчанию

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

Для организации спискового дерева используются два вида структур:
Проходная структура:

Указатель на следующую структуру того-же уровня;
Указательна предыдущую структуру того-же уровня;
Указатель на структуру родителя (нижний уровень);
Указатель на структуру потомка (этот или более высокий уровень);

И собственно структура животного:
Указатель на проходную стуктуру этого уровня;
Указатель на проходную структуру следующего уровня;
Указатель на проходную структуру предыдущего уровня;
Координата положения особи на плоскости X;
Координата положения особи на плоскости Y;
Ну и здесь описание всевозможных характеристик особи;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 28.10.2011, 10:02   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,538
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Касательно c# - я бы хранил всех в одном списке <TList> обрабатывал действия через кеш, чтобы была иллюзия, что все они действуют одновременно.
А я бы ввёл животным состояния (жрёт, спаривается,...). Обработка одновременных событий - по типу отрисовки спрайтов в играх:
Код:
BeginPaint()
...
EndPaint();
Всё что на месте ... выполняется якобы одновременно.
Так же я бы ввёл что-то типа тика процессора. На каждый тик обрабатываются все животные, которые в данный момент бездельничают и для них определяется действие. Всё потому, что по заданию: животные едят и размножаются с разной скоростью. Хотя, возможно, есть смысл всех животных обрабатывать и по необходимости менять им деятельность. А то, пока человек будет есть 10 ходов траву, его амёба загрызёт.
pu4koff вне форума Ответить с цитированием
Старый 28.10.2011, 10:31   #7
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,357
По умолчанию

Итак, вкратце, что я думаю, по этому поводу:
Начните с симуляции питания. Животные разных видов имеют разный радиус обзора, у новых поколений он всё лучше и лучше (будем оптимистами и представим что угол обзора - квадрат). class LifeField будет регулировать появление class Food. Как только появляется трава - срабатывает событие, которое информирует все классы о том, что трава появилась по координатам (x,y), те животные, в пределах видимости которых находится эта точка - срываются туда, а кто не видит её - продолжают прочесывать местость.
Патрулирование местости - вопрос более сложный. Тут надо себе его задать... Как бы я искал еду?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 28.10.2011, 10:39   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,305
По умолчанию

Цитата:
Как бы я искал еду?
По спирали ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.10.2011, 12:38   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от VlS81 Посмотреть сообщение
Искал работу прогером (опыта нет,ток теория),скидывал резюмехи и вот прислали тестовое задание!
...
Посоветуйте как реализовать проект который написан ниже?
Спасибо за ранее![/COLOR]
А зарплатой тоже с нами делиться будете ?
mihali4 вне форума Ответить с цитированием
Старый 28.10.2011, 13:15   #10
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Цитата:
Патрулирование местости - вопрос более сложный. Тут надо себе его задать... Как бы я искал еду?
1. Сканирование местности по всем направлениям. Поле обзора это, скажем, квадрат диагональ которого равна двойному радиусу обзора существа, соответственно дальше остается только вычислить какие клетки принадлежат этому квадрату - вот их существо и будет сканировать.
2. Если найдена еда переход к П3, нет - к П5
3. Если еда в радиусе непосредственного доступа - едим, Конец алгоритма. Нет - переход к П4.
4. Еда вне зоны доступа - движение к ближайшему объекту еда.
5. Это самый сложный пункт, если вокруг нет никаких объектов, существо должно выбрать направлением либо по каким-нибудь косвенным параметрам либо совершенно рандомно. Можно еще допустить, что при таком стечении обстоятельств существо должно умереть, но живые организмы существа нерациональные, они будут бороться за свою жизнь не смотря ни на что.

Такой мыслительный процесс должен происходить на каждой итерации цикла с каждым существом, тогда задачи всех существ будут оптимальными, так как при движении к одной цели могут обнаружится другие - более приоритетные.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симулятор сисадмина JTG Свободное общение 61 30.03.2011 20:41
Час Земли Alex Cones Свободное общение 58 06.04.2010 10:43
Thorium project-симулятор цифровых схем. Levsha100 Софт 8 07.12.2009 00:19
Симулятор web формы Черничный Работа с сетью в Delphi 4 03.09.2008 08:38
Онлайн игра симулятор дальнобойщика ТРИУМФ Gamedev - cоздание игр: Unity, OpenGL, DirectX 21 23.05.2008 19:20