📄 main.cpp
字号:
{
if (i >= 0 && j >= 0 && i < m_grassN && j < m_grassM )
{
if (m_grass[i][j].ramNum > 0)
{
double num = m_wolves[index].hunger;
if (num >= m_grass[i][j].ramNum)
{
//全部吃掉此地的羊
m_wolves[index].hunger -= m_grass[i][j].ramNum;
m_grass[i][j].ramNum = 0;
for (int ii = 0 ; ii < 10 ; ii++)
{
if (m_grass[i][j].ramIndex[ii] >= 0)
{
m_rams[m_grass[i][j].ramIndex[ii]].death = true;
}
}
}else
{
//吃掉部分羊
m_grass[i][j].ramNum -= m_wolves[index].hunger;
m_wolves[index].hunger = 0;
for (int ii = 0 ; ii < 10 ; ii++)
{
if (m_grass[i][j].ramIndex[ii] >= 0)
{
m_rams[m_grass[i][j].ramIndex[ii]].death = true;
num -= 1;
if (num < 1)
break;
}
}
}
if (m_wolves[i].hunger < 0 )
{
m_wolves[index].hunger = -4;
break;
}
}
}
}
if (m_wolves[i].hunger < 0 )
{
break;
}
}
//饿死
if (m_wolves[index].hunger > 0.5 * 4)
{
m_wolves[index].death = true;
//对草原的信息进行更新
m_grass[x][y].wolfNum;
for (j = 0 ; j < 10 ; j++)
{
if (m_grass[x][x].wolfIndex[j] == index)
{
m_grass[x][y].wolfIndex[j] = -1;
break;
}
}
}
}
}
//羊生殖
for (i = 0 ; i < MaxR ; i++)
{
if (!m_rams[i].death && m_rams[i].childDays > 100)
{
for (j = i + 1 ; j < MaxR ; j++)
{
if (!m_rams[j].death && m_rams[j].childDays > 100 && m_rams[i].female != m_rams[j].female
&& abs(m_rams[i].x - m_rams[j].x) + abs(m_rams[i].y - m_rams[j].y) < 3)
{
double r = (double)rand() / ((double)RAND_MAX + 1);
if (r < 0.25)
{
int index1 = -1;
int index2 = -1;
int turn = 0;
for ( index = 0 ; index < MaxR ; index++)
{
if (m_rams[index].death)
{
index2 = index1;
index1 = index;
if (index2 > -1)
break;
}
}
if (index2 < 0)
{
//错误,太多的狼产生
cout<<"There are too many rams in ";
cout<<currDay<<"days ...";
//count<<"days...";
return -1;
}
m_rams[index1].death = false;
m_rams[index1].female = true;
m_rams[index1].hunger = 0;
m_rams[index1].childDays = 1;
m_rams[index2].death = false;
m_rams[index2].female = false;
m_rams[index2].hunger = 0;
m_rams[index2].childDays = 1;
for (int i = 0 ; i < m_grassN ; i++)
{
for (int j = 0 ; j < m_grassM ; j++)
{
if (m_grass[i][j].ramNum < 1)
{
if (turn == 0)
{
m_grass[i][j].ramNum += 1;
m_grass[i][j].ramIndex[0] = index1;
turn = 1;
}else
{
m_grass[i][j].ramNum += 1;
m_grass[i][j].ramIndex[0] = index2;
break;
}
}
}
if (turn == 1)
break;
}
if (turn != 1)
{
//错误,太多的狼产生
cout<<"There are too many rams in "<< currDay<< "days...";
return -1;
}
}
}
}
}
}
//狼生殖
for (i = 0 ; i < MaxW ; i++)
{
if (!m_wolves[i].death && m_wolves[i].childDays < 1)
{
//交配生殖
for (j = i + 1 ; j < MaxW ; j++)
{
if (!m_wolves[j].death && m_wolves[j].childDays < 1 && m_wolves[i].female != m_wolves[j].female
&& abs(m_wolves[i].x - m_wolves[j].x) + abs(m_wolves[i].y - m_wolves[j].y) < 3)
{
double r = (double)rand() / ((double)RAND_MAX + 1);
if (r < 0.25)
{
if (m_wolves[i].female)
{
m_wolves[i].childDays = 1;
}else
{
m_wolves[j].childDays = 1;
}
}
}
}
}
if (!m_wolves[i].death && m_wolves[i].childDays > 100)
{
//小狼成熟
int index1 = -1;
int index2 = -1;
int turn = 0;
m_wolves[i].childDays = 0;
for ( index = 0 ; index < MaxR ; index++)
{
if (m_wolves[index].death)
{
index2 = index1;
index1 = index;
if (index2 > -1)
break;
}
}
if (index2 < 0)
{
//错误,太多的狼产生
cout<<"There are too many wolves in "<<currDay<<"days...";
return -1;
}
m_wolves[index1].death = false;
m_wolves[index1].female = 1;
m_wolves[index1].hunger = 0;
m_wolves[index1].childDays = 0;
m_wolves[index2].death = false;
m_wolves[index2].female = false;
m_wolves[index2].hunger = 0;
m_wolves[index2].childDays = 0;
for (int i = 0 ; i < m_grassN ; i++)
{
for (int j = 0 ; j < m_grassM ; j++)
{
if (m_grass[i][j].wolfNum < 1)
{
if (turn == 0)
{
m_grass[i][j].wolfNum += 1;
m_grass[i][j].wolfIndex[0] = index1;
turn = 1;
}else
{
m_grass[i][j].wolfNum += 1;
m_grass[i][j].wolfIndex[0] = index2;
break;
}
}
}
if (turn == 1)
break;
}
if (turn != 1)
{
//错误,太多的狼产生
cout<<"There are too many wolves in " <<currDay<< "days...";
return -1;
}
}
}
//随机移动
for (i = 0 ; i < MaxR ; i++)
{
//羊移动
if (!m_rams[i].death)
{
x = m_rams[i].x;
y = m_rams[i].y;
int step;
for (int i = 0 ; i < 10 ; i++)
{
//随机向四个方向
step = (int)((double)rand() / ((double)RAND_MAX + 1) * 4);
switch(step)
{
case 0:
x++;
break;
case 1:
x--;
break;
case 2:
y++;
break;
case 3:
y--;
break;
}
}
if (x < 0)
x = 0;
if (y < 0)
y = 0;
if (x >= m_grassN)
x = m_grassN-1;
if (y >= m_grassM)
y = m_grassM-1;
if (m_grass[x][y].ramNum < 9)
{
for (int ii = 0 ; ii < 10 ; ii++)
{
if (m_grass[x][y].ramIndex[ii] < 0)
{
m_grass[x][y].ramIndex[ii] = i;
m_grass[m_rams[i].x][m_rams[i].y].ramNum--;
for (int ii = 0 ; ii < 10 ;ii++)
{
if (m_grass[m_rams[i].x][m_rams[i].y].ramIndex[ii] == i)
{
m_grass[m_rams[i].x][m_rams[i].y].ramIndex[ii] = -1;
m_rams[i].x = x;
m_rams[i].y = y;
break;
}
}
break;
}
}
}
}
}
for (i = 0 ; i < MaxW ; i++)
{
//狼移动
if (!m_wolves[i].death)
{
x = m_wolves[i].x;
y = m_wolves[i].y;
int step;
for (int i = 0 ; i < 10 ; i++)
{
//随机向四个方向
step = (int)((double)rand() / ((double)RAND_MAX + 1) * 4);
switch(step)
{
case 0:
x++;
break;
case 1:
x--;
break;
case 2:
y++;
break;
case 3:
y--;
break;
}
}
if (x < 0)
x = 0;
if (y < 0)
y = 0;
if (x >= m_grassN)
x = m_grassN-1;
if (y >= m_grassM)
y = m_grassM-1;
if (m_grass[x][y].wolfNum < 9)
{
for (int ii = 0 ; ii < 10 ; ii++)
{
if (m_grass[x][y].wolfIndex[ii] < 0)
{
m_grass[x][y].wolfIndex[ii] = i;
m_grass[m_wolves[i].x][m_wolves[i].y].wolfNum--;
for (int ii = 0 ; ii < 10 ;ii++)
{
if (m_grass[m_wolves[i].x][m_wolves[i].y].wolfIndex[ii] == i)
{
m_grass[m_wolves[i].x][m_wolves[i].y].wolfIndex[ii] = -1;
m_wolves[i].x = x;
m_wolves[i].y = y;
break;
}
}
break;
}
}
}
}
}
}
//模拟结束
return 0;
}
void CEcosystem::Usage()
{
cout<<"\n------------------------生态系统模拟------------------------\n\n";
return ;
}
void CEcosystem::PrintInfor(int day)
{
if (day == 0)
day = m_days;
int ram = 0 ,wolf = 0;
for (int i = 0 ; i < MaxR ; i++)
if (!m_rams[i].death)
ram++;
for (int i = 0 ; i < MaxW ; i++)
if (!m_wolves[i].death)
wolf++;
cout<<"状态:\n"<<"天数:"<<"羊数:"<<"狼数:"<<endl;
printf("%4d:%4d:%4d:\n\n",day,ram,wolf);
//cout<<day<<":"<<ram<<":"<<wolf<<":"<<endl<<endl;
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -