C++编程题生态系统.docx
《C++编程题生态系统.docx》由会员分享,可在线阅读,更多相关《C++编程题生态系统.docx(11页珍藏版)》请在冰豆网上搜索。
C++编程题生态系统
院系:
计算机学院
实验课程:
计算机基础实验
实验项目:
简单生态系统仿真实验
*******
开课时间:
2012~2013年度第2学期
专业:
计算机科学与技术
班级:
12级1班
学生:
杨丹
学号:
*********42
华南师范大学教务处
一、 题目
1、实验内容:
设计和开发一个简单的生态系统仿真软件
2、实验要求:
按照综合设计实验的格式要求撰写本实验的实验报告;
代码规范、注释简洁清晰;
独立完成代码的编写和调试以及实验报告的撰写;
二、中文摘要
在代码的基础上进行完善或者重写,修改完善各类生物物种的现有规则;尝试着添加新的物种,并定义相应的规则;通过不断的重构来完善系统的设计和实现,在改进中体会如何权衡各种因素,通过合理有效的面向对象设计和实现,带来代码复用、隔离变化、增加扩展性等方面的好处。
通过本次综合开发,加深对面向对象概念的理解,提高软件设计和开发能力,培养自学能力和刻苦钻研的精神,增强独立思考的习惯和勇于创新的魄力。
三、关键词
生态系统、仿真模型、物种、生存规则、代码复用
四、前言
在了解供参考的仿真模型后,阅读供参考的代码,然后在代码的基础上进行完善或者重写,通过不断的重构来完善系统的设计和实现,在改进中体会如何权衡各种因素,通过合理有效的面向对象设计和实现,带来代码复用、隔离变化、增加扩展性等方面的好处。
仿真模型和代码结构提倡按照自己的理解和能力进行自由发挥,使得仿真模型更合理、显示方式更直观、配置更方便、扩展更容易、可维护性更好。
通过本次综合开发,加深对面向对象概念的理解,提高软件设计和开发能力,培养自学能力和刻苦钻研的精神,增强独立思考的习惯和勇于创新的魄力。
五、软件的开发过程
1、添加物种:
狼
(1)添加cpp文件,狮子的更新以及生存条件:
#include"lion.h"
#include"empty.h"
StateLionUnit:
:
getState()
{
returnLION;
}
StateLionUnit:
:
nextState()
{
age++;
round();
if(sum[LION]>TMLION)
{
returnEMPTY;
}
else
{
if(age>DLION)
{
returnEMPTY;
}
else
{
returnLION;
}
}
}
voidLionUnit:
:
round()
{
world->sums(pos,sum);
}
(2)添加头文件:
//lion.h
#include"living.h"
classLionUnit:
publicLivingUnit
{
public:
LionUnit(World*w,intr,intc,inta=0):
age(a)
{
pos.row=r;
pos.colum=c;
world=w;
}
StategetState();
StatenextState();
voidround();
protected:
intage;
};
(3)狮子的世界类型:
voidWorld:
:
worldOfLion()
{
srand(unsigned(time(0)));
for(inti=2;ifor(intj=2;j{
intrandom1=1+(5-1)*rand()/(RAND_MAX+1.0);
switch(random1)
{
case1:
(*curMap)[i][j]=LION;break;
case2:
(*curMap)[i][j]=FOX;break;
case3:
(*curMap)[i][j]=RABBIT;break;
default:
(*curMap)[i][j]=GRASS;break;
}
}
}
(4)枚举类型中添加const成员
(5)对狮子的输出控制
2、对其它物种的生存条件的修改
草:
StateGrassUnit:
:
nextState()
{
round();
if(sum[GRASS]>sum[RABBIT]||sum[EMPTY]>0)
{
returnGRASS;
}
else
{
returnEMPTY;
}
}
兔子:
StateRabbitUnit:
:
nextState()
{
round();
if(sum[FOX]>sum[RABBIT]||sum[LION]>sum[RABBIT]||sum[FOX]+sum[LION]>sum[RABBIT])
{
returnEMPTY;
}
else
{
if(++age>DRAB)
{returnEMPTY;}
else
{
returnRABBIT;
}
}
}
狐狸:
StateFoxUnit:
:
nextState()
{
age++;
round();
if(sum[LION]>sum[FOX])
{returnEMPTY;}
else
{
if(sum[FOX]>TMFOX)
{
returnEMPTY;
}
else
{
if(age>DFOX)
{
returnEMPTY;
}
else
{
returnFOX;
}
}
}
}
3、其它世界的布局
草:
voidWorld:
:
worldOfGrass()
{
srand(unsigned(time(0)));
for(inti=2;ifor(intj=2;j{
intrandom1=1+(11-1)*rand()/(RAND_MAX+1.0);
switch(random1)
{
case1:
(*curMap)[i][j]=LION;break;
case2:
case3:
(*curMap)[i][j]=FOX;break;
case4:
case5:
case6:
(*curMap)[i][j]=RABBIT;break;
default:
(*curMap)[i][j]=GRASS;break;
}
}
}
兔子:
StateRabbitUnit:
:
nextState()
{
round();
if(sum[FOX]>sum[RABBIT]||sum[LION]>sum[RABBIT]||sum[FOX]+sum[LION]>sum[RABBIT])
{
returnEMPTY;
}
else
{
if(++age>DRAB)
{returnEMPTY;}
else
{
returnRABBIT;
}
}
}
狐狸:
StateFoxUnit:
:
nextState()
{
age++;
round();
if(sum[LION]>sum[FOX])
{returnEMPTY;}
else
{
if(sum[FOX]>TMFOX)
{
returnEMPTY;
}
else
{
if(age>DFOX)
{
returnEMPTY;
}
else
{
returnFOX;
}
}
}
}
4、对主函数的修改
//一个简单的生态仿真系统
#include
usingnamespacestd;
#include"scene.h"
intmain()
{
intwo;
cout<<"(1:
WORLD_OF_GRASS,2:
WORLD_OF_RABBIT,3:
WORLD_OF_FOX,4:
WORLD_OF_LION)"<";
cin>>wo;
switch(wo)
{
case1:
wo=WORLD_OF_GRASS;break;
case2:
wo=WORLD_OF_RABBIT;break;
case3:
wo=WORLD_OF_FOX;break;
default:
wo=WORLD_OF_LION;break;
}
Worldworld(wo);
Scenescene(world);
scene.run();
return1;
}六、系统测试情况
七、 系统的优点与不足
优点:
能模拟不同类型世界的演变过程,且不会造成生态系统的崩溃。
可以选择不同的世界,随用户自由选择。
物种的生成可随机分配。
缺点:
模拟不同的世界类型不够仿真,动物无法自然老死。