gpt4 book ai didi

erlang - 如何在 Erlang 中实现 "game loop"?

转载 作者:行者123 更新时间:2023-12-03 09:24:54 25 4
gpt4 key购买 nike

我想在 Erlang 中实现一个游戏循环(充当服务器),但我不知道如何处理缺少递增变量的情况。

我想要做什么,用 Java 代码描述:

class Game {
int posX, posY;
int wall = 10;
int roof = 20;

public void newPos(x,y) {

if(!collision(x,y)) {
posX = x;
posY = y;
}
}

public boolean collision(x,y) {
if(x == wall || y == roof) {
// The player hit the wall.
return true;
}
return false;
}

public sendStateToClient() {
// Send posX and posY back to client
}


public static void main(String[] args) {

// The game loop
while(true) {

// Send current state to the client
sendStateToClient();

// Some delay here...
}
}
}

如果客户端移动,则调用 newPos() 函数。如果没有发生碰撞,此函数会更改一些坐标变量。游戏循环永远持续下去,只是将当前状态发送回客户端,以便客户端可以绘制它。

现在我想在 Erlang 中实现这个逻辑,但我不知道从哪里开始。我无法以与这里相同的方式设置变量 posX 和 posY ...我唯一的想法是某种递归循环,其中坐标是参数,但我不知道这是否是正确的方法。 ..

最佳答案

您的直觉是正确的:以状态作为参数的递归循环是标准的 Erlang 方法。

这个概念通常是通过使用 OTP 中的服务器行为之一来抽象出来的。

简单的例子,可能包含错误:

game_loop(X, Y) ->
receive
{moveto, {NewX, NewY}} ->
notifyClient(NewX, NewY),
game_loop(NewX, NewY)
end.

关于erlang - 如何在 Erlang 中实现 "game loop"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com