📄 adventure.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 + -