[我编写了此算法以使NPC在给定的水平上随机移动,但效果很好,除了当他有更多可能的方向可供选择时,我无法阻止NPC向后移动。
我基本上告诉它如果方向数小于等于2则保持其方向(这是因为这意味着他可以保持自己的方向以及他来的方向),否则,只需选择一个随机方向即可;选择方向的功能,基本上根据其当前位置计算可能的方向,将其存储在临时数组中,然后从中选择一个随机方向。
我实际上只有NPC在具有2个以上的方向时才向后倒退,因为调用该函数时他基本上仍然可以选择该方向,而我尝试做的一切都会失败或使程序崩溃。] >
这里是代码:
#define UP 0
#define DW 1
#define LT 2
#define RT 3
typedef struct{
int dirC;
int numDir;
} Dir;
typedef struct{
int x;
int y;
Dir dir
} Player;
char map[][];
main(){
Player player;
player.dir.numDir = getNumDir(player);
if (player.dir.numDir <=2){
player.dir.dirC = player.dir.dirC;
} else {
player.dir.dirC = choseDirection(player);
}
return 0;
}
int choseDirection(Player p){
int possibleDir[4] = {0}
p.dir.numDir = 0;
if(map[p.y-1][p.x] == ' '){
possibleDir[p.dir++] = UP;
}
if(map[p.y+1][p.x] == ' '){
possibleDir[p.dir++] = DW;
}
if(map[p.y][p.x-1] == ' '){
possibleDir[p.dir++] = LT;
}
if(map[p.y-1][p.x+1] == ' '){
possibleDir[p.dir++] = RT;
}
p.dir = possibleDir[rand() % p.dir];
return p.dir;
}
int getNumDir(Player p){
p.dir.numDir=0;
if(map[p.y-1][p.x] == ' '){
p.dir.numDir++;
}
if(map[p.y+1][p.x] == ' '){
p.dir.numDir++;
}
if(map[p.y][p.x-1] == ' '){
p.dir.numDir++;
}
if(map[p.y-1][p.x+1] == ' '){
p.dir.numDir++;
}
return p.dir.numDir;
}
我编写了此算法,以使NPC在给定的水平上随机移动,除了它在有更多可能的方向可供选择时我无法阻止NPC向后退的事实之外,它的效果很好。我...
注意:此代码是C和C ++的混合(我建议选择其中一个并坚持使用)。