防止向后移动算法

问题描述 投票:-1回答:1

[我编写了此算法以使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 algorithm game-physics
1个回答
0
投票

注意:此代码是C和C ++的混合(我建议选择其中一个并坚持使用)。

© www.soinside.com 2019 - 2024. All rights reserved.