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

📄 rc_agent.cpp

📁 人工智能课堂作业
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				   ///////////////////////////
                   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 + -