|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Интересная задача на Canvas))
Доброго времени суток! У меня тут задачка есть на биологическую тематику.
Есть Хищники, Травоядные и Растения. Каждые из них живут определённое количество циклов, также по истечении определённого времени хищники поедают травоядных, травоядные растения, а растения поедают хищников+травоядных(для каждого типа своё количество циклов и количество съеденных особей). Ещё все они производят на свет себе подобных. Всё это задаётся пользователем(длительность жизни, нужное время для размножения, время поедания других существ и так далее). + Все они занимаю начальную территорию(что тоже надо первоначально задать), которую надо изобразить через Canvas(хищники - красные квадратики, травоядные - синие, и Растения - зелёные). Т.е. зада ча состаит в том, чтобы после всех заданных параметрах пользователь нажимал на кнопру(оно нажатие - один цикл) и видел весь процесс доменирования тех или иных существ.(т.е. прошло несколько циклов- кого нибудь съели, и один квадратик убавился, и также с рождением. ) На мой взгляд довольно трудно всё это воспринять, но если кого нибудь заинтересует, прошу писать на Mail (DooM8781@mail.ru). |
#2
|
||||
|
||||
Где-то я видел таккую задачу.
В чем у тебя сложность? Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
|||
|
|||
Не, на "жизнь" это точно не похоже. Здесь суть в том, что бы посмотреть что произойдёт через,примерно 10 циклов(нажатия кнопки 10 раз).
А сделать я не могу сам потому что я очень не дружу с массивами(((. Да там наверно ещё и денамический надо использовать. Даа, то условие которое я написал, очень трудно для понимания, но я уже не знаю как более корректно объяснить. Но если что то более менее понятно, задавайте вопросы, отвечу. |
#5
|
||||
|
||||
1. Сделай полное описание жизненных циклов объектов (растения, травоядные, хишники).
2. Сделай полное описание взаимодействий между объектами (растения, травоядные, хишники). Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#6
|
||||
|
||||
Там далеко все не так просто. Скажем вот примерно такой базовый класс Организм:
Код:
TOrganizm = class private fName: String; // Собственно что за тварь fSpeed: Integer; // Максимальная скорость ее передвижения по миру fOld: Integer; //Текущий возраст - задается в днях fStartReproduction: Integer; // Когда она это самое могет fFinishReproduction: Integer; // Когда она уже это самое не может и грустит fMaxOld: Integer; //Максимальный возраст после которого грабки отбрасывает fMaxChilds: Integer; //Сколько потомков может настругать когда могет это самое public property Name: String read fName write fName; property Speed: Integer read fSpeed write fSpeed default 0; property Old: Integer read fOld write fOld default 0; property StartReproduction: Integer read fStartReproduction write fStartReproduction; property FinishReproduction: Integer read fFinishReproduction write fFinishReproduction; property MaxOld: Integer read fMaxOld write fMaxOld; property MaxChilds: Integer read fMaxChilds write fMaxChilds; end; Код:
with TOrganizm.Create do begin Name := 'Трава'; Speed := 0; StartReproduction := 10; FinishReproduction := 20; MaxOld := 40; MaxChilds := 20; end; with TOrganizm.Create do begin Name := 'Кролик'; Speed := 3; StartReproduction := 90; FinishReproduction := 720; MaxOld := 900; MaxChilds := 6; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 26.04.2011 в 19:55. |
#7
|
||||
|
||||
Вот вот, данных маловато. А сама идея довольно интересная.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#8
|
||||
|
||||
Кто кого кушает - можно для каждого смотреть в N клеток вокруг, выбирать жертву (рандом) и соответственно производить нужные действия.
Например: хищник стоит на клетке (5;5), а на клетке (7,6) стоит травоядное. => хищник его видит и может съесть. Если не съел никого за M "ходов" - умер сам. Если лень считать точки, попадающие в окружность, можно "аппрокмимировать" повернутым на 45 градусов квадратом. А если совсем лень, то можно и не повернутым Воспроизведение соответственно тоже, по заданному времени в соседней клетке появляется такой же. потом можно добавить рандом, мол хищник не смог поймать травоядное, или травоядное подавилось растением. Еще можно например сделать чтобы если хищник съедает травоядного, то перемещается на его клетку. Или чтобы просто все периодически немного двигались, т.е. если существу из рандом(6) выпало счастливое число 0, то он на одну-две клетки куда-нибудь переезжает. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 26.04.2011 в 22:08. |
#9
|
|||
|
|||
Господа программисты, всё на много проще чем вы думаете.)) Графическое отображение проекта нужно только лишь для того, что бы следить за изменением количества Красных(хищников) Зелёных(растений) и синих(млекопитающих) квадратиков. Не важно есть ли кто рядом или нет, животное или растение в любом случае будет и умирать и размножаться.
Вот ВСЕ вводные данные: Штук(Integer): k1 - первоначальное количество Хищников. k2 - первоначальное количество Млекопитающих. k3 - первоначальное количество Растений. В циклах(Integer)(цикл-одно нажатие кнопки): x1 - Длительность жизни Хищников. x2 - Длительность жизни Млекопитающих. x3 - Длительность жизни Растений. В штуках(real)(ведь может быть и 0.5 штук, т.е 1 съеденная особь за 2 цикла): y1 - Хищники потребляют за один цикл млекопитающих. y2 - Млекопитающие потребляют за один цикл Растений. y3 - Растения потребляют за один цикл Хищников+млекопитающих. В штуках(real): z1 - Хищники за один цикл производят на свет себе подобных. z2 - Млекопитающие производят за один цикл на свет себе подобных. z3 - Растения производят за один цикл на свет себе подобных. Вот вроде и всё что нужно. И надо создать процедуру выведения через Канвас красных зелёных и синих квадратиков. Получается пользователь задаёт все эти данные, и при нажатиях на кнопку наблюдает за увеличением или уменьшением тех или иных видов существ. Ещё раз приношу свои извинения за предыдущее непонятное изложение задачи. |
#10
|
||||
|
||||
Ряд вопросов:
1. Зачем тогда вообще рисовать цветные точки на поле, если расположение вообще не влияет на процесс? Может достаточно лейбла в капшене которого будет указано число особей на данный момент? Если нет - по какому принципу располагаются "точки" на поле? 2. Если есть некого? Все равно продолжаем размножаться и жить дальше? 3. А у кого приоритет выше? Кто кого первым съедает? Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#11
|
|||
|
|||
1. Дело в том, что надо обязательно в графическом виде изобразить, и именно через Канвас. я могу отобразить это в виде простой круговой диограммы, но её тоже нельзя. Расположение точек скорее всего должно быть так: Хищные с верхнего левого угла развиваются, Млекопитающие с левого нижнего, и Растения с центра правой стороны.
2. Да, на счёт этого я забыл упомянуть. Конечно же должны быть соответствующие последствия при нехватке еды.Уменьшение размножения и длительности жизни. 3. А вот на счёт этого я даже не думал... как здесь будет более менее логично сделать... |
#12
|
||||
|
||||
А как они питаются если по углам сидят? Они же не достают друг друга. Или они перемещаются по полю в процессе жизненного цикла? А как перемещаются, если не секрет? А что за секрет, если не секрет?
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#13
|
|||
|
|||
Никакого секрета нет.)) В виде графики отображается только их количество и всё.)) больше от графики ничего не требуется(ну если не считать полного заполнения поля, но это врятли). Мы просто моделируем процесс. Что да как там происходит, пользователь должен представлять сам(в виде роликов или фотографий ). Нужно просто результаты расчётов вывести в какой нибудь скрытый лэйбл или эдит, и уже исходя из этих данных просто рисовать квадратики с помощью канваса
|
#14
|
||||
|
||||
Нуууу... Так даже не интересно...
Хорошо, описывай по порядку что должен уметь каждый объект. И будем пробовать переводить это в код. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#15
|
|||
|
|||
Описать програмно? но зачем? Ведь каждый из них только рождается живёт и поедает... Может быть я чего не понимаю, но мне кажеться что это не имеет смысла.
А на счёт сложности... мне бы хотя бы к такой проге движок написать, да и изобразить всё это, а потом можно уже и усложнить. Хотя там наверно потом для усложнения придётся всю программу переделывать. |