Node.js / Socket.IO中的基本AI

时间:2013-05-21 19:21:23

标签: javascript node.js socket.io

我在Node.js / Socket.IO中创建一个小游戏,需要一些关于创建AI的建议。我下面的代码是我想出的一个真实的快速示例,但是它很快,玩家甚至看不到敌人在客户端移动。我是否采用这种方法处于正确的位置,还是我应该采用更好的方式来做这件事?

谢谢!

var random;

setInterval(function() {
    random = Math.round(Math.random() * 200);
    move(random, random);
    console.log("Moving player");
}, 10000)

var move = function(targetX, targetY) {
    if (x < targetX) {
        while (x < targetX) {
            x++;
            sendNewCoordinates(x, y);
        }
    } else if (x > targetX) {
        while (x > targetX) {
            x--;
            sendNewCoordinates(x, y);
        }
    } else if (y < targetY) {
        while (y < targetX) {
            y++;
            sendNewCoordinates(x, y);
        }
    } else if (y > targetY) {
        while (y > targetX) {
            y--;
            sendNewCoordinates(x, y);
        }
    }
};

var sendNewCoordinates = function(newX, newY) {
    socket.sockets.emit("move enemy", {x: newX, y: newY});
};

1 个答案:

答案 0 :(得分:1)

这实际上是一个非常好的AI!随机化运动之间的间隔对于这样的事情来说是一种非常简单,常用的技术。我很好奇,很想尝试你正在制作的任何东西!但要注意的一件事是确保AI不是 TOO 好。

您可以在代码中实现的另一件事是让您的AI“瞄准”稍微远离目标的点。例如:

var move = function(targetX + randomX, targetY + randomY)

您还可以在移动之前使用目标的位置来预测目标的位置。

var xChange = (targetX2 - targetX1)/(timeInterval1);
var yChange = (targetY2 - targetY1)/(timeInterval1);
var move = function(targetX + xChange * timeInterval2, targetY + yChange * timeInterval2)

其中timeInterval1是两个目标位置之间的时间间隔,timeInterval2是当前位置和下一个位置之间的时间间隔。

关键不在于让玩家的AI太难了。 ;)