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

📄 wumpus_world.cpp

📁 人工智能课堂作业
💻 CPP
字号:
#include "wumpus_world.h"#include "types.h"
typedef Object *Object_Column;void Wumpus_World::reset_agent(){   // initialize agent agent.x=1; agent.y=1; agent.arrow=True; agent.gold=0; agent.percept.stench=Fasle; agent.percept.breeze=Fasle; agent.percept.glitter=Fasle; agent.escaped=Fasle; agent.alive=True;}void Wumpus_World::init(){ unsigned int x;  unsigned int y;
  for(y=1;y<5;y++)
  {
      for(x=1;x<5;x++)
		  world[x][y]=Empty;

  }

  for(y=0;y<5;y++)
  {	  world[y][0]=empty;
     world[0][y]=empty;
  }
  /*x=3;
  y=1;
  world[x][y]=Pit;
  world[2][4]=Pit;
  world[4][2]=Living_Wumpus;
  world[3][3]=Gold;*/
  world[3][3]=Pit;
  world[1][4]=Pit;
  world[4][2]=Living_Wumpus;
  world[4][1]=Gold;}int Wumpus_World::adjacent(const Object OBJECT){/*  if ( (world[agent.x-1][agent.y]== world) ||        (world[agent.x][agent.y-1]== world) ||       (world[agent.x+1][agent.y]== world) ||       (world[agent.x][agent.y+1]== world) )  {  cout<<"adjacent online"<<endl; return True;}  return Fasle;  */ 
	int i,j;
	i=agent.x;
	j=agent.y;
	     if(i==1&&j==4)
		 { 
			 if(world[i+1][j]==OBJECT||world[i][j-1]==OBJECT)
             {    return True;}    

           
		 }
         if(i==4&&j==4)
		 { 
			 if(world[i-1][j]==OBJECT||world[i][j-1]==OBJECT)
			 {     return True;}
		

		 }
         if(i==4&&j==1)
		 { 
			 if(world[i-1][j]==OBJECT&&world[i][j+1]==OBJECT)
			 {       return True;}

   
		 }
	   //这里是边界的方格的判断
	   if(i==1&&j!=4&&j!=1)
	   {
            if(world[i][j-1]==OBJECT||world[i][j+1]==OBJECT||world[i+1][j]==OBJECT)
			{  
				 return True;
            } 

	   }
	   if(i==4&&j!=4&&j!=1)
	   {
            if(world[i][j-1]==OBJECT||world[i][j+1]==OBJECT||world[i-1][j]==OBJECT)
			{	 return True;
            } 
	
	   }
	   if(j==1&&i!=4&&i!=1)
	   {
           //cout<<"PIT ONLINE"<<endl; 
		   //cout<<j<<"      "<<i<<endl;
		   if(world[i-1][j]==OBJECT||world[i][j+1]==OBJECT||world[i+1][j]==OBJECT)
			{	
                return True;
            } 
		

	   }
	   if(j==4&&i!=4&&i!=1)
	   {
            if(world[i-1][j]==OBJECT||world[i+1][j]==OBJECT||world[i][j-1]==OBJECT)
			{return True;
            } 

	   }
	   //对不是边界判断
	   if((i!=1)&&(i!=4)&&(j!=4)&&(j!=1))

       { 
            if(world[i-1][j]==OBJECT||world[i+1][j]==OBJECT||world[i][j-1]==OBJECT||world[i][j+1]==OBJECT)
            {
                return  True;
			}
        
	   }
	   return Fasle;}int Wumpus_World::current(const Object OBJECT){  if(world[agent.x][agent.y]==OBJECT)    return True;  return Fasle;  }void Wumpus_World::set_percepts(){  agent.percept.stench=adjacent(Living_Wumpus) ;  agent.percept.breeze= adjacent(Pit);  agent.percept.glitter=current(Gold);}void Wumpus_World::do_UpForward(){  
  if(agent.x==4)
	  //cout<<"THE UPEST PANE!";
	  agent.x=4;
  else 
     agent.x++;  set_percepts();    if (current(Pit) || current(Living_Wumpus))    agent.alive=Fasle;}
void Wumpus_World::do_DownForward()
{
  
  if(agent.x==1)
	  //cout<<"THE DOWNEST PANE!";
	  agent.x=1;
  else 
     agent.x--;
  set_percepts();  
  if (current(Pit) || current(Living_Wumpus))
    agent.alive=Fasle;
}void Wumpus_World::do_LeftForward()
{
  
  if(agent.y==1)
	  //cout<<"THE lEFTEST PANE!";
	  agent.y=1;
  else 
     agent.y--;  
  set_percepts();  
  if (current(Pit) || current(Living_Wumpus))
    agent.alive=Fasle;
}
void Wumpus_World::do_RightForward()
{
  
  if(agent.y==4)
	  agent.y=4;
  else 
     agent.y++;
  set_percepts();  
  if (current(Pit) || current(Living_Wumpus))
    agent.alive=Fasle;
}

void Wumpus_World::do_Grab(){    if (current(Gold))  {       agent.gold++;    world[agent.x][agent.y]=Empty;    agent.percept.glitter=Fasle;
	cout<<"THE AGENT HAVE GOTTEN GOLD!"<<endl;  }; }void Wumpus_World::do_Shoot(int x,int y,Action ac,Object w[5][5]){    //cout << "action=  shoot" << endl;   if (agent.arrow==Fasle)     return;
   if(ac==UpForward)
	  x=x+1;
   if(ac==DownForward)
	  x=x-1;
   if(ac==LeftForward)
	  y=y-1;
   if(ac==RightForward)
	  y=y+1;  if(agent.arrow==True)
  {	 
	  if(w[x][y]==Living_Wumpus)
          w[x][y]=Dead_Wumpus;

  }    agent.arrow=Fasle; }void Wumpus_World::do_action(const Action ACTION,int x,int y,Action a,Object w[5][5]){     switch(ACTION)  {    case UpForward: do_UpForward(); break;    case RightForward: do_RightForward();break;     case LeftForward:  do_LeftForward();break;
    case DownForward: do_DownForward(); break;    case Grab: do_Grab(); break;    case Shoot: do_Shoot(x,y,a,w); break;      };}/*void Wumpus_World::evaluate(Abstract_Agent &a, const unsigned int MAX_STEPS){  unsigned int steps=0;  long score=0;    cout << endl << "Starting evaluation..." << endl;  reset_agent();  set_percepts();  do  {    show();    do_action(a.select_action(agent.percept));    score=score-ACTION_PENALTY;    steps++;  }while ((agent.alive) && (!agent.escaped) && (steps < MAX_STEPS));   if(!agent.alive)     score-=DEATH_PENALTY;  else      if ((agent.escaped) && (agent.gold > 0))     score+=SUCCES_BONUS;  cout << endl << "This agent has a score of " << score << endl;    }*/void Wumpus_World::show(Percept percept1[5][5],Object w[5][5]){  unsigned int x; unsigned int y;  cout << endl;  for(x=4; x >0; x--)  {    for(y=1; y <=4; y++)    {      if((x==agent.x) && (y==agent.y) && (world[x][y]==Empty||world[x][y]==Dead_Wumpus))      {  
		  cout << "A  ";

	  }	      else	      {  
		  if(w[x][y]==Pit)
			  cout<<"P  ";
		  if(w[x][y]==Living_Wumpus)
			  cout<<"W  ";
		  if(w[x][y]==Empty)
			  cout<<"E  ";
		  if(w[x][y]==Dead_Wumpus)
			  cout<<"D  ";
		  if(w[x][y]==Gold)
			  cout<<"G  ";
	  /* if(percept1[x][y].breeze==Null)
			cout<<"."<<"   ";
		
		  else
		  {
		    if(percept1[x][y].breeze==True)
				cout<<"B";
			else 
				cout<<"";
		    if(percept1[x][y].glitter==True)
				cout<<"G"; 
			else 
				cout<<"";
		    if(percept1[x][y].stench==True)
				cout<<"S";
			else
				cout<<"";
			if(percept1[x][y].breeze==Fasle&&percept1[x][y].glitter==Fasle&&percept1[x][y].stench==Fasle)
				cout<<"E";
		  }*/
				
	  }
 
          }
         cout<<endl;    }
  	cout<<agent.x<<","<<agent.y<<"  breeze"<<"  glitter"<<"  stench"<<endl;
	cout<<"     "<<agent.percept.breeze<<"  "<<agent.percept.glitter<<"  "<<agent.percept.stench<<endl;  cout << "agent at location ("<<agent.x<<","<<agent.y<<")"<<endl;  }// hier wordt de Wumpus World gecreeerd.Wumpus_World::Wumpus_World(){  /*unsigned int x=0;  max_x=MAX_X;  // 2 extra voor muren  max_y=MAX_Y;  // 2 extra voor muren  // wereld creeeren  world=new Object_Column[max_x+2];  for(x=0; x < max_x+2; x++)    world[x]=new Object[max_y+2];  // nu de wereld nog initializeren    init();*/}// hier wordt de Wumpus World vernietigdWumpus_World::~Wumpus_World(){ /* unsigned int x=0;  for(x=0; x < max_x+2; x++)    delete []world[x];  delete []world;  world=NULL;*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -