1

Erlang で簡単なコンソール ゲームを作成しています。過去 2 日間、いくつかの Erlang モジュールとテストを作成してきましたが、(個々のモジュールで) すべて正常に動作しています。ゲームを実行し、モジュールを連携させる方法について混乱しています。

私は「Greater Good」の本を読んでおり、OTP についてかなり読んでいますが、圧倒されます。どこかに従うことができる簡単なチュートリアルはありますか? 本の OPT の例は、私がやろうとしていることに対してやり過ぎですか?

更新: フィードバックありがとうございます。ここに、より具体的な質問があります。

私は2つのモジュールを持っています.....

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"].

これら 2 つのモジュールは別のファイルにあります。これらのモジュールが互いに通信して、ユーザーが推測を入力できるようにして、秘密のコードを推測しようとすると、ゲームは「はい」または「いいえ」を返します。

「gets」ステートメントに 2 行を追加して、秘密のコードを生成し、それを推測と比較したいと考えています。

-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!").

私は正しい軌道に乗っていないことを知っています。これを行う簡単な方法はありますか?

4

2 に答える 2

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>
于 2013-05-09T17:04:24.837 に答える