0

ゲームメーカー8.0で洞窟探検ゲームを作りたいです。ブロック オブジェクトとジェネレーターを作成しましたが、行き詰まっています。これがジェネレーターの私のコードです

var r;
r = random_range(0, 1);
repeat(room_width/16) {
    repeat(room_height/16) {
        if (r == 1) {
            instance_create(x, y, obj_block)
        }
        y += 16;
    }
    x += 16;
}

今、私は常に空白のフレームを取得します

4

7 に答える 7

1

irandom(1)整数を取得するために使用する必要があります。また、毎回新しい値が生成されるように、ループ内に配置する必要があります。

于 2013-11-23T11:44:07.973 に答える
1

2 番目のステートメントでは、ランダムな数値を生成し、r に格納しています。実際に必要なのは、2 つの値のいずれかを選択することです。この機能を使用することをお勧めしますchoose(...)。訂正されたステートメントは次のとおりです。

r = choose(0,1);    //Choose either 0 or 1 and store it in r

また、上記のステートメントを内側のループに移動します。(ブロックを配置するかどうかを各スポットで (x,y) の位置に配置するかどうかを決定したいためですよね?)

また、値 16 を直接使用する代わりにsprite_widthandを代用することをお勧めします。これにより、スプライトに加えた変更がそれに応じてブロックの結果のレイアウトを調整します。sprite_height

修正を加えたコードは次のとおりです。

var r;
repeat(room_width/sprite_width) {
    repeat(room_height/sprite_height) {
        r = choose(0, 1);
        if (r == 1)
            instance_create(x, y, obj_block);
        y += sprite_height;
    }
    x += sprite_width;
}

それはうまくいくはずです。それが役立つことを願っています!

于 2013-12-05T16:20:38.803 に答える
0
  1. 変数の代入r = random_range(0, 1);がループの外にあります。したがって、ループを開始する前に 1 回だけ実行されます。

  2. random_range(0, 1)0 から 1 の間のランダムな実数を返します (整数ではありません!)。しかし、あなたは持っていますif (r == 1)- 得る確率は1非常に小さいです.

例として:

repeat(room_width/16) {
    repeat(room_height/16) {
        if (irandom(1)) {
            instance_create(x, y, obj_block)
        }
        y += 16;
    }
    x += 16;
}
于 2013-11-22T07:45:10.500 に答える
0

可能性のある、おそらくさらに良い解決策は次のとおりです。

length = room_width/16;
height = room_height/16;

for(xx = 0; xx < length; xx+=1)
{
    for(yy = 0; yy < height; yy+=1)
    {
    if choose(0, 1) = 1 {
    instance_create(xx*16, yy*16, obj_block); }
    }
}

ランダムな洞窟が必要な場合は、単一のブロックだけでなく、それらのブロックのランダムなセクションを削除する必要があります。

于 2013-12-10T11:36:41.600 に答える
0

ボーナス ポイントとして、ランダムな洞窟の生成にシード値を使用できます。また、ランダムな開口部とそのパスからランダムに生成される偽のパスを使用して、フィニッシュへの保証されたパスを持つパスのランダム生成を行うこともできます。次に、余分なスペースを他のランダムなピースで埋めることができます。

ただし、コードに関しては、ブロックを配置するたびに乱数を再定義する必要があるため、すべて同じです。ループ内で呼び出す必要があり、10 進数ではなく整数にする必要があります。

于 2014-01-16T15:11:24.413 に答える
0

r==1 の場合にのみインスタンスを作成しているようです。毎回インスタンスを作成するべきではありませんか?

于 2013-11-20T15:58:43.313 に答える