Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 14.07.2010, 22:22   #1
den
Дэвелопер
 
Аватар для den
 
Регистрация: 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
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Волчий остров

Этот код - гениален!!11111адинадин
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
Dream (15.07.2010), impersonalis (14.07.2010)
Старый 14.07.2010, 22:32   #3
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Волчий остров

Этот код - гениален!!11111адинадин
Я же написал:
То что я написал - это говнокод недоделаный. Кто муже он неправильно работает.
(Offline)
 
Ответить с цитированием
Старый 14.07.2010, 22:46   #4
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Волчий остров

Ну если не хотите копаца в моём коде, тогда напишите свои версии как ето сделать.
(Offline)
 
Ответить с цитированием
Старый 14.07.2010, 22:59   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Волчий остров

http://forum.boolean.name/showthread.php?t=6341
Лопату мне! ЛОПАТУ!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
is.SarCasm (14.07.2010)
Старый 14.07.2010, 23:29   #6
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Радость Ответ: Волчий остров

Сообщение от impersonalis Посмотреть сообщение
http://forum.boolean.name/showthread.php?t=6341
Лопату мне! ЛОПАТУ!

Так то VB, а мне надо на VC++ (VB я ваще не знаю)
(Offline)
 
Ответить с цитированием
Старый 14.07.2010, 23:54   #7
Morganolla
Бывалый
 
Аватар для Morganolla
 
Регистрация: 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
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Волчий остров

Имхо описание того что надо очень хорошее. Читай и сразу кодь.
Где-нибудь храни всё то, что на поле (вариантов два:
1 сделать поле-массив и там всё хранить.
2 сделать массивы с координатами кроликов, волков и т.п.)
Потом их всех обходить: проверить близость кролика/волчицы или переместить кого-нибудь в соседнюю клетку не составит труда.
С анимацией справляйтесь сами.
Р.s. Могу реализовать на мидлет паскале. (на следующей неделе, щас я не дома) Если кого интересует, пишите в личку.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 15.07.2010, 00:44   #9
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Волчий остров

2 сделать массивы с координатами кроликов, волков и т.п.)
Я так и делал (см код выше). Но что там не то. Короче скомпилируйте, сами увидете.
(Offline)
 
Ответить с цитированием
Старый 15.07.2010, 01:46   #10
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Волчий остров

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

Потом. Новые родившиеся волки если они мужского полу начнут тут же иметь мать и сестер. Такие дела. Неуказан период половозрелости как и пропажа интереса к волчице у волка после спаривания. Так и период беременности
Такие вот дела... тоже касается кроликов.
__________________
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
ABTOMAT (15.07.2010), Arton (15.07.2010), den (15.07.2010), Igor (17.07.2010), impersonalis (15.07.2010), is.SarCasm (15.07.2010), Randomize (17.07.2010), Reks888 (16.07.2010), St_AnGer (15.07.2010)
Старый 15.07.2010, 12:58   #11
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Волчий остров

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

Потом. Новые родившиеся волки если они мужского полу начнут тут же иметь мать и сестер. Такие дела. Неуказан период половозрелости как и пропажа интереса к волчице у волка после спаривания. Так и период беременности
Такие вот дела... тоже касается кроликов.
Да уж, действительно, недодуманныя задача
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reks888 (16.07.2010)
Старый 17.07.2010, 09:07   #12
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Волчий остров

Да уж, действительно, недодуманныя задача
SBJoker уже додумал
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:53.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com