2013-05-09 145 views
1

我正在Erlang建立一个简单的控制台游戏。过去两天我一直在编写一些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!"). 

我知道我不是在正确的轨道上。有没有简单的方法来做到这一点?

+2

你应该添加一些更具体的例子和代码,否则你的问题不适合该网站。请阅读[FAQ](http://stackoverflow.com/faq)。 – 2013-05-09 04:56:51

回答

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> 
+0

哇,谢谢!!!这帮了我很多!还有10000个奖励点让我看看如何比较两个答案。 :) – Kelly 2013-05-12 01:50:37

2

您已经呼吁:
格式功能io模块在您的 console_io模块io:format(Message)
种子从 secret_code模块random:seed(now())随机模块的功能。
您将以相同的方式拨打生成功能secret_code模块看起来像:secret_code:generate()

您可以在线阅读LearnYouSomeEralng教程,这是Erlang/OTP的最佳教程之一,并在所有方面都是完整的。