1

私は JS を練習するための楽しいプロジェクトとして MUD を作成しようとしています (私は完全な初心者ですが、codecademy からもっと学ぶことに触発されました!) JS で自分のダンジョンを表現する方法についてアドバイスを得られることを望んでいました。 .

ダンジョンに欲しい機能は次のとおりです。

  1. ダンジョンにはランダムな数の部屋が必要です(指定されたパラメーター内)
  2. 部屋にはモンスターが自動的に配置されます
  3. (今のところ、部屋がどのように接続されているかは無視できます)

JS は OO 言語であるため、ダンジョンを表現する最善の方法はオブジェクトであると考えました。

var dungeon = {
    var room1:roomA,
    var room2:roomB,
    var room3:roomC
}

//RoomX is an object created with the following constructor

function Room(){
    this.description: "Some text",
    this.monsters:[monster1,monster2,monster3],
    this.treasure:[treasure1,treasure2,treasure3]  
}

その後、ルーム オブジェクトのメソッドを作成して、プレーヤーがルーム内のものとやり取りできるようにする予定です。

質問:

1) これは良いアイデアですか、うまくいきますか?

2) オブジェクトの乱数のプロパティを生成するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

3

一般的には良い考えのように思えますが、あなたのダンジョンの説明はあまり意味がありません. ダンジョンをオブジェクトにすることができます。あなたの例はほぼ正しいですが、次のように、を取り除く必要がありますvar

var dungeon = {
  'room1': roomA,
  'room2': roomB
  ...
}

dungeon.room1これには、 またはからアクセスできます。dungeon['room1']

しかし、このためにランダムな数の部屋を生成するのは不必要に複雑です。最後の要素を取得し、最後から番号を取得し、1 つ増やすだけで、別の部屋を追加する必要があります。

代わりに、ダンジョンを配列として定義し、ランダムな数の部屋を生成するのは簡単です:

//This generates a random number between min and max
var rand = Math.floor(Math.random() * (max - min) + min);

var dungeon = new Array(rand);

for (var i = 0; i < dungeon.length; i++) {
  //This depends on how do you want to generate random rooms
  dungeon[i] = randRoom();
}

Room のコンストラクターも完全には正しくありません。それを適切な JavaScript で書き直すとしたら、次のようになります。

function Room(){
  this.description = "Some text";
  this.monsters = [monster1,monster2,monster3];
  this.treasure = [treasure1,treasure2,treasure3];
}

これは次のように初期化されます。

var room = new Room();

そして、すべてのフィールドにアクセスできます:

room.description // returns "Some text"
room.monsters    // returns [monster1,monster2,monster3];

:最初に示した例のように、オブジェクト リテラルを使用してオブジェクトを作成するときに使用されます{}。コンストラクターで定義されたオブジェクトの場合は、 を使用します=

于 2012-02-29T01:21:36.360 に答える
3

これはかなり自由回答形式の質問です。これを行う方法はたくさんあり、どれも同じように「正しい」と言えます。しかし、いくつかのポイント:

オブジェクト リテラルの構文が無効ですvar。プロパティ名からキーワードを削除して、次のようにする必要があります。

var dungeon = {
     room1:roomA,
     room2:roomB,
     room3:roomC
} 

しかし、部屋の配列を使用したほうがよいと思います。

var dungeon = [ roomA, roomB, roomC ];

そうすれば、部屋の数を簡単に変えることができるからです。部屋をランダムに生成していると仮定すると、新しい部屋を配列に簡単に追加できますdungeon.push(new Room())

さらに、部屋が通常のグリッドになる場合は、配列の配列を使用してこれを表すことができます。

var dungeon = [ [ roomA, roomB, roomC ],
                [ roomD, roomE, roomF ],
                [ roomG, roomH, roomI ] ];

右中央の部屋はdungeon[1, 2](行 1、列 2、配列インデックスはゼロベースであることに注意してください) としてアクセスされます。

関数内の割り当て構文も正しくありません。言う必要があります

this.propertyName = someValue;
// NOT
this.propertyName : someValue;

:オブジェクト リテラル構文ではプロパティの作成にコロンが使用されますが、その他の代入に{ property : value }は等号が使用されます。=variableOrProperty = value

于 2012-02-29T01:22:23.833 に答える