📄 rc_agent.cpp
字号:
#include "rc_agent.h"
#include "wumpus_world.h"#include <iostream.h>#include <math.h>
#include "types.h"
void Control_Agent::EMPTY(Percept percept2[5][5])
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(i==1&&j==4)
{
if(((percept2[i+1][j].breeze==Fasle)||(percept2[i][j-1].breeze==Fasle))&&((percept2[i+1][j].stench==Fasle)||(percept2[i][j-1].stench==Fasle)))
{ object[i][j]=Empty; }
}
if(i==4&&j==4)
{
if(((percept2[i-1][j].breeze==Fasle)||(percept2[i][j-1].breeze==Fasle))&&((percept2[i-1][j].stench==Fasle)||(percept2[i][j-1].stench==Fasle)))
{ object[i][j]=Empty;}
}
if(i==4&&j==1)
{
if(((percept2[i-1][j].breeze==Fasle)||(percept2[i][j+1].breeze==Fasle))&&((percept2[i-1][j].stench==Fasle)||(percept2[i][j+1].stench==Fasle)))
{ object[i][j]=Empty;}
}
//这里是边界的方格的判断
if(i==1&&j!=4&&j!=1)
{
if(((percept2[i+1][j].breeze==Fasle)||(percept2[i][j-1].breeze==Fasle)||(percept2[i][j+1].breeze==Fasle))&&((percept2[i+1][j].stench==Fasle)||(percept2[i][j-1].stench==Fasle)||(percept2[i][j+1].stench==Fasle)))
{ object[i][j]=Empty;
}
}
if(i==4&&j!=4&&j!=1)
{
if(((percept2[i-1][j].breeze==Fasle)||(percept2[i][j-1].breeze==Fasle)||(percept2[i][j+1].breeze==Fasle))&&((percept2[i-1][j].stench==Fasle)||(percept2[i][j-1].stench==Fasle)||(percept2[i][j+1].stench==Fasle)))
object[i][j]=Empty;
}
if(j==1&&i!=4&&i!=1)
{
if(((percept2[i][j+1].breeze==Fasle)||(percept2[i-1][j].breeze==Fasle)||(percept2[i+1][j].breeze==Fasle))&&((percept2[i][j+1].stench==Fasle)||(percept2[i-1][j].stench==Fasle)||(percept2[i+1][j].stench==Fasle)))
object[i][j]=Empty;
}
if(j==4&&i!=4&&i!=1)
{
if(((percept2[i][j-1].breeze==Fasle)||(percept2[i-1][j].breeze==Fasle)||(percept2[i+1][j].breeze==Fasle))&&((percept2[i][j-1].stench==Fasle)||(percept2[i-1][j].stench==Fasle)||(percept2[i+1][j].stench==Fasle)))
object[i][j]=Empty;
}
//对不是边界判断
if((i!=1)&&(i!=4)&&(j!=4)&&(j!=1))
{
if(((percept2[i-1][j].breeze==Fasle)||(percept2[i+1][j].breeze==Fasle)||(percept2[i][j-1].breeze==Fasle)||(percept2[i][j+1].breeze==Fasle))&&((percept2[i-1][j].stench==Fasle)||(percept2[i+1][j].stench==Fasle)||(percept2[i][j-1].stench==Fasle)||(percept2[i][j+1].stench==Fasle)))
object[i][j]=Empty;
}
}
}
}
void Control_Agent::PIT(Percept percept2[5][5])
{
//下面的程序是判断object是否有pit
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
//这里下面的程序是用来判断图四个角的方格Pit
if(i==1&&j==4)
{
if(percept2[i+1][j].breeze==True)
if(object[i+2][j]==Empty&&object[i+1][j-1]==Empty)
object[i][j]=Pit;
if(percept2[i][j-1].breeze==True)
if(object[i][j-2]==Empty&&object[i+1][j-1]==Empty)
object[i][j]=Pit;
}
if(i==4&&j==4)
{
if(percept2[i-1][j].breeze==True)
if(object[i-2][j]==Empty&&object[i-1][j-1]==Empty)
object[i][j]=Pit;
if(percept2[i][j-1].breeze==True)
if(object[i][j-2]==Empty&&object[i-1][j-1]==Empty)
object[i][j]=Pit;
}
if(i==4&&j==1)
{
if(percept2[i-1][j].breeze==True)
if(object[i-2][j]==Empty&&object[i-1][j+1]==Empty)
object[i][j]=Pit;
if(percept2[i][j+1].breeze==True)
if(object[i][j+2]==Empty&&object[i-1][j+1]==Empty)
object[i][j]=Pit;
}
//这里是边界的方格的判断
if(i==1&&j!=4&&j!=1)
{
if(percept2[i][j-1].breeze==True)
{ if((j-1)==1)
if(object[i+1][j-1]==Empty)
object[i][j]=Pit;
else
if(object[i+1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Pit;
}
if(percept2[i][j+1].breeze==True)
{ if((j+1)==4)
if(object[i+1][j+1]==Empty)
object[i][j]=Pit;
else
if(object[i+1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Pit;
}
if(percept2[i+1][j].breeze==True)
if(object[i+1][j-1]==Empty&&object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Pit;
}
if(i==4&&j!=4&&j!=1)
{
if(percept2[i][j-1].breeze==True)
{ if((j-1)==1)
if(object[i-1][j-1]==Empty)
object[i][j]=Pit;
else
if(object[i-1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Pit;
}
if(percept2[i][j+1].breeze==True)
{ if((j+1)==4)
if(object[i-1][j+1]==Empty)
object[i][j]=Pit;
else
if(object[i-1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Pit;
}
if(percept2[i-1][j].breeze==True)
if(object[i-1][j-1]==Empty&&object[i-1][j+1]==Empty&&object[i-2][j]==Empty)
object[i][j]=Pit;
}
if(j==1&&i!=4&&i!=1)
{
//cout<<"PIT ONLINE"<<endl;
//cout<<j<<" "<<i<<endl;
if(percept2[i-1][j].breeze==True)
{
if((i-1)==1)
{
if(object[i-1][j+1]==Empty)
object[i][j]=Pit;
}
else
{//cout<<"PIT ONLINE"<<endl; cout<<j<<" "<<i<<endl;
if(object[i-1][j+1]==Empty&&object[i-2][j]==Empty)
{ object[i][j]=Pit;}
}
}
if(percept2[i+1][j].breeze==True)
{ if((i+1)==4)
if(object[i+1][j+1]==Empty)
object[i][j]=Pit;
else
if(object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Pit;
}
if(percept2[i][j+1].breeze==True)
if(object[i+1][j+1]==Empty&&object[i+1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Pit;
}
if(j==4&&i!=4&&i!=1)
{
if(percept2[i-1][j].breeze==True)
{ if((i-1)==1)
if(object[i-1][j-1]==Empty)
object[i][j]=Pit;
else
if(object[i-1][j-1]==Empty&&object[i-2][j]==Empty)
object[i][j]=Pit;
}
if(percept2[i+1][j].breeze==True)
{ if((i+1)==4)
if(object[i+1][j+1]==Empty)
object[i][j]=Pit;
else
if(object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Pit;
}
if(percept2[i][j-1].breeze==True)
if(object[i-1][j-1]==Empty&&object[i+1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Pit;
}
//对不是边界判断
if((i!=1)&&(i!=4)&&(j!=4)&&(j!=1))
{
if(percept2[i-1][j].breeze==True)
{
if(i-1==1)
{
if(object[i-1][j-1]==Empty&&object[i-1][j+1]==Empty)
object[i][j]=Pit;
}
else
{
if(object[i-1][j-1]==Empty&&object[i-1][j+1]==Empty&&object[i-2][j]==Empty)
object[i][j]=Pit;
}
}
if(percept2[i+1][j].breeze==True)
{
if(i+1==4)
{
if(object[i+1][j-1]==Empty&&object[i+1][j+1]==Empty)
object[i][j]=Pit;
}
else
{
if(object[i+1][j-1]==Empty&&object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Pit;
}
}
if(percept2[i][j-1].breeze==True)
{
if(j-1==1)
{
if(object[i-1][j-1]==Empty&&object[i+1][j-1]==Empty)
object[i][j]=Pit;
}
else
{
if(object[i-1][j-1]==Empty&&object[i+1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Pit;
}
}
if(percept2[i][j+1].breeze==True)
{
if(j+1==4)
{
if(object[i-1][j+1]==Empty&&object[i+1][j+1]==Empty)
object[i][j]=Pit;
}
else
{
if(object[i-1][j+1]==Empty&&object[i+1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Pit;
}
}
}
}
}
}
void Control_Agent::LW(Percept percept2[5][5])
{
//下面的程序是判断object是否有wumpus
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
//这里下面的程序是用来判断图四个角的方格Pit
if(i==1&&j==4)
{
if(percept2[i+1][j].stench==True)
if(object[i+2][j]==Empty&&object[i+1][j-1]==Empty)
object[i][j]=Living_Wumpus;
if(percept2[i][j-1].stench==True)
if(object[i][j-2]==Empty&&object[i+1][j-1]==Empty)
object[i][j]=Living_Wumpus;
}
if(i==4&&j==4)
{
if(percept2[i-1][j].stench==True)
if(object[i-2][j]==Empty&&object[i-1][j-1]==Empty)
object[i][j]=Living_Wumpus;
if(percept2[i][j-1].stench==True)
if(object[i][j-2]==Empty&&object[i-1][j-1]==Empty)
object[i][j]=Living_Wumpus;
}
if(i==4&&j==1)
{
if(percept2[i-1][j].stench==True)
if(object[i-2][j]==Empty&&object[i-1][j+1]==Empty)
object[i][j]=Living_Wumpus;
if(percept2[i][j+1].stench==True)
if(object[i][j+2]==Empty&&object[i-1][j+1]==Empty)
object[i][j]=Living_Wumpus;
}
//这里是边界的方格的判断
if(i==1&&j!=4&&j!=1)
{
if(percept2[i][j-1].stench==True)
{ if((j-1)==1)
if(object[i+1][j-1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i+1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i][j+1].stench==True)
{ if((j+1)==4)
if(object[i+1][j+1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i+1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i+1][j].stench==True)
if(object[i+1][j-1]==Empty&&object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Living_Wumpus;
}
if(i==4&&j!=4&&j!=1)
{
if(percept2[i][j-1].stench==True)
{ if((j-1)==1)
if(object[i-1][j-1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i-1][j-1]==Empty&&object[i][j-2]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i][j+1].stench==True)
{ if((j+1)==4)
if(object[i-1][j+1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i-1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i-1][j].stench==True)
if(object[i-1][j-1]==Empty&&object[i-1][j+1]==Empty&&object[i-2][j]==Empty)
object[i][j]=Living_Wumpus;
}
if(j==1&&i!=4&&i!=1)
{
if(percept2[i-1][j].stench==True)
{ if((i-1)==1)
if(object[i-1][j+1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i-1][j+1]==Empty&&object[i-2][j]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i+1][j].stench==True)
{ if((i+1)==4)
if(object[i+1][j+1]==Empty)
object[i][j]=Living_Wumpus;
else
if(object[i+1][j+1]==Empty&&object[i+2][j]==Empty)
object[i][j]=Living_Wumpus;
}
if(percept2[i][j+1].stench==True)
if(object[i+1][j+1]==Empty&&object[i+1][j+1]==Empty&&object[i][j+2]==Empty)
object[i][j]=Living_Wumpus;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -