2013-05-09 110 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的最佳教程之一,並在所有方面都是完整的。