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

Basic AI in Node.js/Socket.IO

本文关键字:AI IO js Socket Node      更新时间:2023-09-26

我正在用Node.js/Socket创建一个小游戏。我需要一些关于创造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});
};

这实际上是一个相当不错的AI!随机安排动作之间的间隔是一种非常简单、常见的技巧。我很好奇,很想尝试你做的任何东西!有一件事需要注意,那就是确保AI不是太好。

你可以在代码中执行的另一件事是让你的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对玩家来说太难。div;)