我正在Erlang中构建一个简单的控制台游戏。在过去的两天里,我一直在编写一些Erlang模块和测试,一切正常(在各个模块中)。我对如何运行游戏并让模块一起工作感到困惑。
我一直在阅读“大善”一书并且已经阅读了很多关于OTP的内容,但感觉压倒一切。有一个简单的教程,我可以在某处?本书中的OPT示例是否因为我想要做的事而过度了?
更新:感谢您的反馈。这是一个更具体的问题。
我有两个模块......
Console_IO模块
-module(console_io).
-export([display/1, display_welcome_message/0, gets/1]).
display(Message) ->
io:format(Message).
gets(Message) ->
{ok, [X]} = io:fread(Message, "~s").
io:format("You entered '~s'.", [X]);
display_welcome_message() ->
display("Welcome to the game!").
密码模块
-module(secret_code).
-export([generate/0, symbols/0]).
generate() ->
random:seed(now()),
[lists:nth(random:uniform(6), symbols()) || _ <- lists:seq(1, 4)].
symbols() ->
["b","g","p","r","y","o"].
这两个模块位于不同的文件中。我希望这些模块能够相互通信,以便用户输入猜测,尝试猜测密码并且游戏返回“是”或“否”。
我想在我的“获取”语句中添加两行来生成密码并将其与猜测进行比较:
-module(console_io).
-export([display/1, display_welcome_message/0, gets/1]).
display(Message) ->
io:format(Message).
gets(Message) ->
{ok, [X]} = io:fread(Message, "~s"),
Code = secret_code:generate,
Code -- [X].
display_welcome_message() ->
display("Welcome to the game!").
我知道我没有走上正轨。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:2)
Code = secret_code:generate,
应该被称为函数调用Code = secret_code:generate(),
。比较可以使用模式匹配来完成。代码如下
-module(console_io).
-export([display/1, display_welcome_message/0, gets/1]).
display(Message) ->
io:format(Message).
gets(Message) ->
{ok, [X]} = io:fread(Message, "~s"),
Code = secret_code:generate(),
check_code(X, Code).
check_code(Code, Code) ->
yes;
check_code(_, _) ->
no.
display_welcome_message() ->
display("Welcome to the game!").
注意secret_code的不同之处在于它是以字符串形式获取而不是返回字符串列表
-module(secret_code).
-export([generate/0, symbols/0]).
generate() ->
random:seed(now()),
[lists:nth(random:uniform(6), symbols()) || _ <- lists:seq(1, 4)].
symbols() ->
"bgpryo".
示例运行:
1> console_io:gets(">").
>bgryo
yes
2> console_io:gets(">").
>bgryj
no
3>
答案 1 :(得分:2)
您已在 console_io 模块io:format(Message)
格式 io 模块的功能 secret_code 模块random:seed(now())
中随机模块的种子功能。
与调用的方式相同生成 secret_code 模块的功能,如下所示:secret_code:generate()
。
您可以在线阅读LearnYouSomeEralng教程,这是最好的教程之一Erlang / OTP并且在所有方面都是完整的。