⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 生态系统模拟
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					{
						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 + -