|
14.07.2010, 22:22
|
#1
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Волчий остров
Вот захотел решить эту задачку:
Разработать имитационную модель системы “хищник–жертва” по следующей схеме.
“Остров” размером 20 на 20 заселен дикими кроликами, волками и волчицами. Имеется по нескольку представителей каждого вида. Кролики в каждый момент времени с одинаковой вероятностью 1/9 передвигаются в один из восьми соседних квадратов (за исключением участков, ограниченных береговой линией) или просто сидят неподвижно. Каждый кролик с вероятностью 0,2 превращается в двух кроликов. Каждая волчица передвигается случайным образом, пока в одном из соседних восьми квадратов не окажется кролик, за которым она охотится. Если волчица и кролик оказываются в одном квадрате, волчица съедает кролика и получает одно очко. В противном случае она теряет 0,1 очка.
Волки и волчицы с нулевым количеством очков умирают.
В начальный момент времени все волки и волчицы имеют 1 очко.
Волк ведет себя подобно волчице до тех пор, пока в соседних квадратах не исчезнут все кролики; тогда, если волчица находится в одном из восьми близлежащих квадратов, волк гонится за ней.
Если волк и волчица окажутся в одном квадрате и там нет кролика, которого нужно съесть, они производят потомство случайного пола.
Задание: понаблюдать за изменением популяции в течение некоторого периода времени. Проследить, как сказываются на эволюции популяций изменения параметров модели.
|
То что я написал - это говнокод недоделаный. Кто муже он неправильно работает.
bool m1[21][21],m2[21][21],m3[21][21];
int n=7;
class volkm
{
public:
int live,x,y,a;
volkm()
{
live=10;
x=::rand()%20;
y=::rand()%20;
}
void move()
{
live--;
m1[x][y]=0;
a=::rand()%9;
if(m3[x-1][y-1]==1 || m3[x][y-1]==1 || m3[x+1][y-1]==1 || m3[x-1][y]==1 || m3[x][y]==1 || m3[x+1][y]==1 || m3[x-1][y+1]==1 || m3[x][y+1]==1 || m3[x+1][y+1]==1)
{
if(m3[x-1][y-1]==1) {x--;y--;}
else if(m3[x][y-1]==1) {x;y--;}
else if(m3[x+1][y-1]==1) {x++;y--;}
else if(m3[x-1][y]==1) {x--;y;}
else if(m3[x][y]==1) {x;y;}
else if(m3[x+1][y]==1) {x++;y;}
else if(m3[x-1][y+1]==1) {x--;y++;}
else if(m3[x][y+1]==1) {x;y++;}
else if(m3[x+1][y+1]==1) {x++;y++;}
else
{
if(m2[x-1][y-1]==1) {x--;y--;}
else if(m2[x][y-1]==1) {x;y--;}
else if(m2[x+1][y-1]==1) {x++;y--;}
else if(m2[x-1][y]==1) {x--;y;}
else if(m2[x][y]==1) {x;y;}
else if(m2[x+1][y]==1) {x++;y;}
else if(m2[x-1][y+1]==1) {x--;y++;}
else if(m2[x][y+1]==1) {x;y++;}
else if(m2[x+1][y+1]==1) {x++;y++;}
}
}
else
{
if(a==0 && x-1>=0 && y-1<=19) {x--;y--;}
if(a==1 && x>=0 && y-1<=19) {x;y--;}
if(a==2 && x+1>=0 && y-1<=19) {x++;y--;}
if(a==3 && x-1>=0 && y<=19) {x--;y;}
if(a==4 && x>=0 && y<=19) {x;y;}
if(a==5 && x+1>=0 && y<=19) {x++;y;}
if(a==6 && x-1>=0 && y+1<=19) {x--;y++;}
if(a==7 && x>=0 && y+1<=19) {x;y++;}
if(a==8 && x+1>=0 && y+1<=19) {x++;y++;}
}
if(live>0)
{
if(m3[x][y]==1) live++;
m1[x][y]=1;
}
}
};
class volkw
{
public:
int live,x,y,a;
volkw()
{
live=10;
x=::rand()%20;
y=::rand()%20;
}
void move()
{
live--;
m2[x][y]=0;
a=::rand()%9;
if(m3[x-1][y-1]==1) {x--;y--;}
else if(m3[x][y-1]==1) {x;y--;}
else if(m3[x+1][y-1]==1) {x++;y--;}
else if(m3[x-1][y]==1) {x--;y;}
else if(m3[x][y]==1) {x;y;}
else if(m3[x+1][y]==1) {x++;y;}
else if(m3[x-1][y+1]==1) {x--;y++;}
else if(m3[x][y+1]==1) {x;y++;}
else if(m3[x+1][y+1]==1) {x++;y++;}
else
{
if(a==0 && x-1>=0 && y-1<=19) {x--;y--;}
if(a==1 && x>=0 && y-1<=19) {x;y--;}
if(a==2 && x+1>=0 && y-1<=19) {x++;y--;}
if(a==3 && x-1>=0 && y<=19) {x--;y;}
if(a==4 && x>=0 && y<=19) {x;y;}
if(a==5 && x+1>=0 && y<=19) {x++;y;}
if(a==6 && x-1>=0 && y+1<=19) {x--;y++;}
if(a==7 && x>=0 && y+1<=19) {x;y++;}
if(a==8 && x+1>=0 && y+1<=19) {x++;y++;}
if(a==0 || a==1 || a==2) {/*рождение волка (волчицы)*/}
}
if(live>0)
{
if(m3[x][y]==1) live++;
m1[x][y]=1;
}
}
};
class krol
{
public:
bool live;
int x,y,a;
krol()
{
live=1;
x=::rand()%20;
y=::rand()%20;
}
void move()
{
m3[x][y]=0;
a=::rand()%9;
if(a==0 && x-1>=0 && y-1<=19) {x--;y--;}
if(a==1 && x>=0 && y-1<=19) {x;y--;}
if(a==2 && x+1>=0 && y-1<=19) {x++;y--;}
if(a==3 && x-1>=0 && y<=19) {x--;y;}
if(a==4 && x>=0 && y<=19) {x;y;}
if(a==5 && x+1>=0 && y<=19) {x++;y;}
if(a==6 && x-1>=0 && y+1<=19) {x--;y++;}
if(a==7 && x>=0 && y+1<=19) {x;y++;}
if(a==8 && x+1>=0 && y+1<=19) {x++;y++;}
if(a==0 || a==1 || a==2) {/*рождение кролика*/}
if(m1[x][y]==1 || m2[x][y]==1) live=0;
if(live=1) m3[x][y]=1;
}
};
void CVolkiandKrolikiDlg::draw()
{
CClientDC dc(this);
CPen noli(0,2,RGB(255,255,255));
CPen volki(0,2,RGB(0,0,0));
CPen volkiw(0,2,RGB(255,0,0));
CPen kroli(0,2,RGB(0,255,0));
dc.SelectObject(noli);
dc.Rectangle(0,0,200,200);
for(int i=0;i<20;i++) for(int j=0;j<20;j++)
if(m1[i][j]==1){
dc.SelectObject(volki);
dc.Rectangle(i*10,j*10,i*10+10,j*10+10);}
for(int i=0;i<20;i++) for(int j=0;j<20;j++)
if(m2[i][j]==1){
dc.SelectObject(volkiw);
dc.Rectangle(i*10,j*10,i*10+10,j*10+10);}
for(int i=0;i<20;i++) for(int j=0;j<20;j++)
if(m3[i][j]==1){
dc.SelectObject(kroli);
dc.Rectangle(i*10,j*10,i*10+10,j*10+10);}
}
void CVolkiandKrolikiDlg::OnBnClickedButton1()
{
::srand(::time(0));
volkm vm[7];
volkw vw[7];
krol k[7];
while(1)
{
Sleep(500);
for(int i=0;i<n;i++)
{
vm[i].move();
vw[i].move();
k[i].move();
}
draw();
}
}
Делал с MFC.
Помогите разобратся, почему всё както не так. (и как сделать появление нового кролика и волка (волчицы)).
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Если лень в моём коде копатся, направте меня на правильный путь, подскажите (в потробностях) как ету задачу сделать.
Последний раз редактировалось den, 14.07.2010 в 22:29.
Причина: код подправил)
|
(Offline)
|
|
14.07.2010, 22:30
|
#2
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Волчий остров
Этот код - гениален!!11111адинадин
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
14.07.2010, 22:32
|
#3
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Волчий остров
Этот код - гениален!!11111адинадин
|
Я же написал:
То что я написал - это говнокод недоделаный. Кто муже он неправильно работает.
|
|
(Offline)
|
|
14.07.2010, 22:46
|
#4
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Волчий остров
Ну если не хотите копаца в моём коде, тогда напишите свои версии как ето сделать.
|
(Offline)
|
|
14.07.2010, 22:59
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Волчий остров
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.07.2010, 23:29
|
#6
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Волчий остров
Сообщение от impersonalis
|
Так то VB, а мне надо на VC++ (VB я ваще не знаю)
|
(Offline)
|
|
14.07.2010, 23:54
|
#7
|
Бывалый
Регистрация: 03.12.2008
Адрес: наша раша
Сообщений: 762
Написано 129 полезных сообщений (для 245 пользователей)
|
Ответ: Волчий остров
Хе-хе. У кроликов тоже надо сделать самца и самку! Кроме этого сделать убывание травы в каждом квадрате, если там был кролик. А так задачка очень интересная. На досуге можно поковыряться... через недельку может наковыряю...
__________________
Reality Simulation Games
Core 2 Duo 2,8GHz, RAM 1Gb, ATI R5670 1Gb. WinXP 32
|
(Offline)
|
|
15.07.2010, 00:31
|
#8
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Волчий остров
Имхо описание того что надо очень хорошее. Читай и сразу кодь.
Где-нибудь храни всё то, что на поле (вариантов два:
1 сделать поле-массив и там всё хранить.
2 сделать массивы с координатами кроликов, волков и т.п.)
Потом их всех обходить: проверить близость кролика/волчицы или переместить кого-нибудь в соседнюю клетку не составит труда.
С анимацией справляйтесь сами.
Р.s. Могу реализовать на мидлет паскале. (на следующей неделе, щас я не дома) Если кого интересует, пишите в личку.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
15.07.2010, 00:44
|
#9
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Волчий остров
2 сделать массивы с координатами кроликов, волков и т.п.)
|
Я так и делал (см код выше). Но что там не то. Короче скомпилируйте, сами увидете.
|
(Offline)
|
|
15.07.2010, 01:46
|
#10
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Волчий остров
В условии задачи дофига пробелов.
Например когла волк поимеет волчицу, они будут на одной клетке а вокруг нет кроликов... он её снова поимеет и так далее волки будут плодится бешенно.
Потом. Новые родившиеся волки если они мужского полу начнут тут же иметь мать и сестер. Такие дела. Неуказан период половозрелости как и пропажа интереса к волчице у волка после спаривания. Так и период беременности
Такие вот дела... тоже касается кроликов.
__________________
|
(Offline)
|
|
Эти 9 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
15.07.2010, 12:58
|
#11
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Волчий остров
Сообщение от SBJoker
В условии задачи дофига пробелов.
Например когла волк поимеет волчицу, они будут на одной клетке а вокруг нет кроликов... он её снова поимеет и так далее волки будут плодится бешенно.
Потом. Новые родившиеся волки если они мужского полу начнут тут же иметь мать и сестер. Такие дела. Неуказан период половозрелости как и пропажа интереса к волчице у волка после спаривания. Так и период беременности
Такие вот дела... тоже касается кроликов.
|
Да уж, действительно, недодуманныя задача
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2010, 09:07
|
#12
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Волчий остров
Да уж, действительно, недодуманныя задача
|
SBJoker уже додумал
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:14.
|