游戏人工智能实验报告四.docx
- 文档编号:1347317
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:32
- 大小:353.19KB
游戏人工智能实验报告四.docx
《游戏人工智能实验报告四.docx》由会员分享,可在线阅读,更多相关《游戏人工智能实验报告四.docx(32页珍藏版)》请在冰豆网上搜索。
游戏人工智能实验报告四
实验四有限状态机实验
实验报告
一、实验目的
通过蚂蚁世界实验掌握游戏中追有限状态机算法
二、实验仪器
Windows7系统
MicrosoftVisualStudio2015
三、实验原理及过程
1)制作菜单
设置参数:
点击会弹出对话框,设置一些参数,红、黑蚂蚁的家会在地图上标记出来
运行:
设置好参数后点击运行,毒药、食物、水会在地图上随机显示
下一步:
2只红蚂蚁和2只黑蚂蚁会随机出现在地图上,窗口右方还会出现红、黑蚂蚁当前数量的统计
不断按下一步,有限状态机就会不断运行,使蚁群产生变化
2)添加加速键
资源视图中
下方
选择ID和键值
3)新建头文件def.h
在AntView.cpp中加入#include"def.h"
与本实验有关的数据大都是在这里定义的
intflag=0;
#definekForage1
#definekGoHome2
#definekThirsty3
#definekDead4
#definekMaxEntities200
classai_Entity{
public:
inttype;
intstate;
introw;
intcol;
ai_Entity();
~ai_Entity(){}
voidNew(inttheType,inttheState,inttheRow,inttheCol);
voidForage();
voidGoHome();
voidThirsty();
voidDead();
};
ai_EntityentityList[kMaxEntities];
#definekRedAnt1
#definekBlackAnt2
intRedHomeRow;
intRedHomeCol;
intBlackHomeRow;
intBlackHomeCol;
intRedNum=2;
intBlackNum=2;
//地图大小,可改变
#definekMaxRows30
#definekMaxCols40
#defineLENGTH20
intterrain[kMaxRows][kMaxCols];
#definekGround1
#definekWater2
#definekBlackHome3
#definekRedHome4
#definekPoison5
#definekFood6
//ai_Entity类中函数的定义
ai_Entity:
:
ai_Entity()
{
type=0;
state=0;
row=0;
col=0;
}
intRnd(intmin,intmax)//不能产生负数
{
intresult;
do{
result=rand()%max;
}while(result<=min);
returnresult;
}
voidai_Entity:
:
New(inttheType,inttheState,inttheRow,inttheCol)
{
type=theType;
row=theRow;
col=theCol;
state=theState;
}
voidai_Entity:
:
Forage()
{
introwMove;
intcolMove;
intnewRow;
intnewCol;
intfoodRow;
intfoodCol;
intpoisonRow;
intpoisonCol;
rowMove=Rnd(-1,3)-1;
colMove=Rnd(-1,3)-1;
newRow=row+rowMove;
newCol=col+colMove;
if(newRow<0)
return;
if(newCol<0)
return;
if(newRow>=kMaxRows)
return;
if(newCol>=kMaxCols)
return;
if((terrain[newRow][newCol]==kGround)||(terrain[newRow][newCol]==kWater))
{
row=newRow;
col=newCol;
}
if(terrain[newRow][newCol]==kFood)
{
row=newRow;
col=newCol;
terrain[row][col]=kGround;
state=kGoHome;
do{
foodRow=Rnd(-1,kMaxRows);
foodCol=Rnd(-1,kMaxCols);
}while(terrain[foodRow][foodCol]!
=kGround);
terrain[foodRow][foodCol]=kFood;
}
if(terrain[newRow][newCol]==kPoison)
{
row=newRow;
col=newCol;
terrain[row][col]=kGround;
state=kDead;
do{
poisonRow=Rnd(-1,kMaxRows);
poisonCol=Rnd(-1,kMaxCols);
}while(terrain[poisonRow][poisonCol]!
=kGround);
terrain[poisonRow][poisonCol]=kPoison;
}
}
voidai_Entity:
:
GoHome()
{
introwMove;
intcolMove;
intnewRow;
intnewCol;
inthomeRow;
inthomeCol;
intpoisonRow;
intpoisonCol;
inti;
if(type==kRedAnt)
{
homeRow=RedHomeRow;
homeCol=RedHomeCol;
}
else
{
homeRow=BlackHomeRow;
homeCol=BlackHomeCol;
}
if(row rowMove=1; elseif(row>homeRow) rowMove=-1; else rowMove=0; if(col colMove=1; elseif(col>homeCol) colMove=-1; else colMove=0; newRow=row+rowMove; newCol=col+colMove; if(newRow<0) return; if(newCol<0) return; if(newRow>=kMaxRows) return; if(newCol>=kMaxCols) return; if(terrain[newRow][newCol]! =kPoison) { row=newRow; col=newCol; } else { row=newRow; col=newCol; terrain[row][col]=kGround; state=kDead; do{ poisonRow=Rnd(-1,kMaxRows); poisonCol=Rnd(-1,kMaxCols); }while(terrain[poisonRow][poisonCol]! =kGround); terrain[poisonRow][poisonCol]=kPoison; } if((newRow==homeRow)&&(newCol==homeCol)) { row=newRow; col=newCol; state=kThirsty; for(i=0;i if(entityList[i].type==0) { entityList[i].New(type,kForage,homeRow,homeCol); if(type==kRedAnt) RedNum++; if(type==kBlackAnt) BlackNum++; break; } } } voidai_Entity: : Thirsty() { introwMove; intcolMove; intnewRow; intnewCol; intfoodRow; intfoodCol; intpoisonRow; intpoisonCol; rowMove=Rnd(-1,3)-1; colMove=Rnd(-1,3)-1; newRow=row+rowMove; newCol=col+colMove; if(newRow<0) return; if(newCol<0) return; if(newRow>=kMaxRows) return; if(newCol>=kMaxCols) return; if((terrain[newRow][newCol]==kGround)||(terrain[newRow][newCol]==kFood)) { row=newRow; col=newCol; } if(terrain[newRow][newCol]==kWater) { row=newRow; col=newCol; terrain[row][col]=kGround; state=kForage; do{ foodRow=Rnd(-1,kMaxRows); foodCol=Rnd(-1,kMaxCols); }while(terrain[foodRow][foodCol]! =kGround); terrain[foodRow][foodCol]=kWater; } if(terrain[newRow][newCol]==kPoison) { row=newRow; col=newCol; terrain[row][col]=kGround; state=kDead; do{ poisonRow=Rnd(-1,kMaxRows); poisonCol=Rnd(-1,kMaxCols); }while(terrain[poisonRow][poisonCol]! =kGround); terrain[poisonRow][poisonCol]=kPoison; } } voidai_Entity: : Dead() { if(type==kRedAnt) RedNum--; if(type==kBlackAnt) BlackNum--; type=0; } 4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 人工智能 实验 报告