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

📄 adventure.cpp

📁 巫魔世界是一个被墙所环绕的二维格子世界
💻 CPP
字号:

#include"wupus.h"
void Wupus_World::action()
{
	hunter.image[hunter.pos->x][hunter.pos->y]=SAFE;//访问位标志    
	 set_percepts();
	 if(hunter.percept.glitter)
	 {
			 Grab();//捡金子
			 hunter.gold=true;
	 }
	
	 
    if(hunter.percept.stench||hunter.percept.breeze)
	 {	//有危险
		if(hunter.pos->x==1&&hunter.pos->y==1)
		{//在入口位置
			if(hunter.percept.stench &&!hunter.percept.scream&&hunter.arrow)//有恶魔,没洞	
			   Shoot();//射箭试探
		    else if(hunter.percept.breeze)
			{//双重危险
				cout<<"????????????????????????????????\nfaint, 还让我活吗?"<<char(7)<<char(7)<<endl;
	            Climb();
			}
		 }
		if(hunter.pos->x==1&&hunter.pos->y==1&&hunter.percept.breeze)
		{   
			if(!hunter.percept.scream&&hunter.arrow)
				Shoot();//巫魔未死,射箭试探
			if(hunter.percept.scream)
			{   
				move(hunter.direction);//巫魔死,面前安全
			}
		}
		if(hunter.pos->x==1&&hunter.pos->y==1&&!hunter.percept.breeze)
		{
			Shoot();
			if(hunter.percept.scream)
			{  //巫魔死了
				move(hunter.direction);
			}
			else Turn_left();
		}
	
     if(hunter.percept.stench&&!hunter.percept.scream)
		 {//以下是通过多次出现危险位置而判断.杀死巫魔
			hunter.image[hunter.pos->x][hunter.pos->y]=WUPUS_DANGER_POS;
			if((adjacent(Wall)&&hunter.image[hunter.pos->x-1][hunter.pos->y-1]==WUPUS_DANGER_POS
				&&hunter.image[hunter.pos->x][hunter.pos->y-1]==SAFE)
				||(hunter.pos->x>2&&hunter.image[hunter.pos->x-2][hunter.pos->y]==WUPUS_DANGER_POS)
		        ||(adjacent(Wall)&&hunter.image[hunter.pos->x-1][hunter.pos->y+1]==WUPUS_DANGER_POS
                   &&hunter.image[hunter.pos->x][hunter.pos->y+1]==SAFE))
			{
				turn(W);
				Shoot();
			}
            if((adjacent(Wall)&&hunter.image[hunter.pos->x-1][hunter.pos->y-1]==WUPUS_DANGER_POS
				&&hunter.image[hunter.pos->x-1][hunter.pos->y]==SAFE)
				||(hunter.pos->y>2&&hunter.image[hunter.pos->x][hunter.pos->y-2]==WUPUS_DANGER_POS)
	            ||(adjacent(Wall)&&hunter.image[hunter.pos->x+1][hunter.pos->y-1]==WUPUS_DANGER_POS
                   &&hunter.image[hunter.pos->x+1][hunter.pos->y]==SAFE))		
			{
				turn(S);
				Shoot();
			}

			if((adjacent(Wall)&&hunter.image[hunter.pos->x+1][hunter.pos->y+1]==WUPUS_DANGER_POS
                &&hunter.image[hunter.pos->x][hunter.pos->y+1]==SAFE)
			    ||(hunter.image[hunter.pos->x+2][hunter.pos->y]==WUPUS_DANGER_POS)
				||(adjacent(Wall)&&hunter.image[hunter.pos->x+1][hunter.pos->y-1]==WUPUS_DANGER_POS
                &&hunter.image[hunter.pos->x][hunter.pos->y-1]==SAFE))
			{	
				turn(E);
				Shoot();
			}
            
			if((adjacent(Wall)&&hunter.image[hunter.pos->x+1][hunter.pos->y+1]==WUPUS_DANGER_POS
                &&hunter.image[hunter.pos->x+1][hunter.pos->y]==SAFE)
				||(hunter.image[hunter.pos->x][hunter.pos->y+2]==WUPUS_DANGER_POS)
				||(adjacent(Wall)&&hunter.image[hunter.pos->x-1][hunter.pos->y+1]==WUPUS_DANGER_POS
                   &&hunter.image[hunter.pos->x][hunter.pos->y-1]==SAFE))
			{	
				turn(N);
				Shoot();
			}
			
            else return;
		}
	
	 
		if(hunter.percept.breeze)
		 {	//有洞,标识位无意义
			hunter.image[hunter.pos->x][hunter.pos->y]=SAFE;
			return;
		 }
	
		return;		
		
	}	


	if(hunter.image[hunter.pos->x+1][hunter.pos->y]==FOG&&move(E))
	{  //未访问过的,向三个前进方向分别进发 
	
		action();
		move(W);
	}
	if(hunter.image[hunter.pos->x][hunter.pos->y+1]==FOG&&move(N))
	{	
		
		action();
		move(S);
	}
	if(hunter.image[hunter.pos->x][hunter.pos->y-1]==FOG&&move(S))
	{
		
		action();
		move(N);
	}
	
    Climb(); //结束搜索
	return;
}

        

⌨️ 快捷键说明

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