📄 rc_agent.cpp
字号:
///////////////////////////
if(b[i].by==1&&b[i].bx!=1&&b[i].bx!=4)
{k=0;
if(b[i].ab->by!=(b[i].by+1)&&(object[b[i].bx][b[i].by+1]==Empty))
{
b[ks].bx=b[i].bx;
b[ks].by=b[i].by+1;
b[ks].ab=&b[i];
b[i].pb[0]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx+1)&&(object[b[i].bx+1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx+1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx-1)&&(object[b[i].bx-1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx-1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[0]=&b[ks];
ks=ks+1;
}
}
///////////////////////////
if(b[i].by==4&&b[i].bx!=1&&b[i].bx!=4)
{k=0;
if(b[i].ab->by!=(b[i].by-1)&&(object[b[i].bx][b[i].by-1]==Empty))
{
b[ks].bx=b[i].bx;
b[ks].by=b[i].by-1;
b[ks].ab=&b[i];
b[i].pb[0]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx+1)&&(object[b[i].bx+1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx+1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx-1)&&(object[b[i].bx-1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx-1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
}
}
///////////////////////////
if(b[i].by!=1&&b[i].by!=4&&b[i].bx!=1&&b[i].bx!=4)
{k=0;
if(b[i].ab->by!=(b[i].by-1)&&(object[b[i].bx][b[i].by-1]==Empty))
{
b[ks].bx=b[i].bx;
b[ks].by=b[i].by-1;
b[ks].ab=&b[i];
b[i].pb[0]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->by!=(b[i].by+1)&&(object[b[i].bx][b[i].by+1]==Empty))
{
b[ks].bx=b[i].bx;
b[ks].by=b[i].by+1;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx+1)&&(object[b[i].bx+1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx+1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
k=k+1;
}
if(b[i].ab->bx!=(b[i].bx-1)&&(object[b[i].bx-1][b[i].by]==Empty))
{
b[ks].bx=b[i].bx-1;
b[ks].by=b[i].by;
b[ks].ab=&b[i];
b[i].pb[k]=&b[ks];
ks=ks+1;
}
}
///////////////////////////
}
}
void Control_Agent::select_action(Percept percept1[5][5],int x,int y){
EMPTY(percept1);
cout<<"object[1][4]"<<object[1][4]<<endl;
PIT(percept1);
LW(percept1);
if(percept1[x][y].glitter==True)
{
raction[0]=Grab;
return ;
}
// cout<<"panduan object"<<endl;
// cout<<object[2][3]<<endl;
// cout<<object[2][2]<<endl;
//cout<<object[1][3]<<endl;
for(int i=1;i<=4;i++)
{ //1
for(int j=1;j<=4;j++)
{//2
if(percept1[i][j].breeze==Null&&object[i][j]==Empty)
{//3
//cout<<"y "<<y<<endl;
//cout<<object[x][y+1]<<endl;
if((y!=4)&&(percept1[x][y+1].breeze==Null)&&(object[x][y+1]==Empty))
{//4
//cout<<i<<" "<<j<<endl;
//cout<<"object[1][4]"<<object[1][4]<<endl;
raction[0]=RightForward;
return;
}//1
if(y!=1&&percept1[x][y-1].breeze==Null&&object[x][y-1]==Empty)
{//5
raction[0]=LeftForward;
return;
}//2
if(i!=1&&percept1[x-1][y].breeze==Null&&object[x-1][y]==Empty)
{//6
raction[0]=DownForward;
return;
}//3
if(i!=4&&percept1[x+1][y].breeze==Null&&object[x+1][y]==Empty)
{//7
raction[0]=UpForward;
return;
} //4
ks=1;
for(int i1=0;i1<100;i1++)
{//8
b[i1].pb[0]=&b1;
b[i1].pb[1]=&b1;
b[i1].pb[2]=&b1;
b[i1].pb[3]=&b1;
b[i1].ab=&b1;
}//5
for(i1=0;i1<64;i1++)
{//9
//cout<<i1<<endl;
KZ(object,x,y,i1);
for(int p1=0;p1<ks;p1++)
// cout<<p1<<" "<<b[p1].bx<<" "<<b[p1].by<<endl;
for(int j1=0;j1<ks;j1++)
{//10
if(percept1[b[j1].bx][b[j1].by].breeze==Null&&object[b[j1].bx][b[j1].by]==Empty)
{//11
int t=0;
obj *b2,b3;
b2=b[j1].ab;
for(int p=1;p<20;p++)
{//12
//cout<<b2->bx<<" "<<b2->by<<endl;
if(b2!=&b1)
{ t=t+1;}
else
break;
b2=b2->ab;
}//6
//cout<<"ZHELI SHI JINXING "<<endl;
//cout<<t<<endl;
b2=b[j1].ab;
b3=b[j1];
for( p=t;p>=0;p--)
{//13
if(b2!=&b1)
{//14
if(b2->bx+1==b3.bx)
raction[p]=UpForward;
if(b2->bx-1==b3.bx)
raction[p]=DownForward;
if(b2->by+1==b3.by)
raction[p]=RightForward;
if(b2->by-1==b3.by)
raction[p]=LeftForward;
} //7
b3=*b2;
b2=b2->ab;
}//8
return;
} //9
} //10
//cout<<"kz after"<<endl;
//cout<<i1<<endl;
}//11
}//12
}//13
}//14
for( i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(object[i][j]==Living_Wumpus)
{
for(int i2=1;i2<=4;i2++)
{
for(int j2=1;j2<=4;j2++)
{
if(x==i2&&y==j2)
{
if(x==i&&y==j-1)
{
raction[1]=RightForward;
raction[0]=Shoot;
return;
}
if(x==i&&y==j+1)
{
raction[1]=LeftForward;
raction[0]=Shoot;
return;
}
if(x==i-1&&y==j+1)
{
raction[1]=UpForward;
raction[0]=Shoot;
return;
}
if(x==i+1&&y==j)
{
raction[1]=DownForward;
raction[0]=Shoot;
return;
}
}
else
{
ks=1;
for(int i1=0;i1<64;i1++)
{
b[i1].pb[0]=&b1;
b[i1].pb[1]=&b1;
b[i1].pb[2]=&b1;
b[i1].pb[3]=&b1;
b[i1].ab=&b1;
}
int p;
for(int i3=1;i3<=64;i3++)
{
KZ(object,x,y,i3);
for(int j1=0;j<ks;j1++)
{
if(percept1[b[j1].bx][b[j1].by].stench==True)
{
int t=0;
obj *b2,b3;
b2=b[j1].ab;
for(p=1;p<64;p++)
{
if(b2!=&b1)
t=t+1;
b2=b2->ab;
}
b2=b[j1].ab;
b3=b[j1];
for( p=t;p>=0;p--)
{
if(b2!=&b1)
{
if(b2->bx+1==b3.bx)
raction[p]=UpForward;
if(b2->bx-1==b3.bx)
raction[p]=DownForward;
if(b2->by+1==b3.by)
raction[p]=RightForward;
if(b2->by-1==b3.by)
raction[p]=LeftForward;
}
b3=*b2;
b2=b2->ab;
}
if(b[j1].bx==i&&b[j1].by==j-1)
{
raction[p+2]=RightForward;
raction[p+1]=Shoot;
return;
}
if(b[j1].bx==i&&b[j1].by==j+1)
{
raction[p+2]=LeftForward;
raction[p+1]=Shoot;
return;
}
if(b[j1].bx==i-1&&b[j1].by==j+1)
{
raction[p+2]=UpForward;
raction[p+1]=Shoot;
return;
}
if(b[j1].bx==i+1&&b[j1].by==j)
{
raction[p+2]=DownForward;
raction[p+1]=Shoot;
return;
}
}
}
}
}
}
}
}
}
}
cout<<"在这时无论利用何种方法已无法判断PIT和LIVING_WUMPUS"<<endl;
if(percept1[x][y].breeze==True&&percept1[x][y].stench==Fasle)
{
KX(x,y,percept1);
}
if(percept1[x][y].breeze==True&&percept1[x][y].stench==True)
{
KX(x,y,percept1);raction[0]=Shoot;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -