0

コードをクリーンアップするためにループを使用することを私は知っています。つまり、言う代わりに

myItem = myArray[0]
my2ndItem = myArray[1]

要素100程度までは、コードが100行かかり、見苦しくなります。スリム化して見栄えを良くする/ループを使用するとより効率的になります。

ゲームを作成していて、プレイヤーが制御していない100人の敵が正確な位置に出現し、それぞれの位置が異なるとします。

100行のコードを使用せずに、一体どうやってすべてをスポーンしますか?たとえば、すべてを25ヤード離したい場合は、ループを使用して25ずつインクリメントするだけでよいと理解できます。

そうは言っても、この場合の静的プログラミングは、考えられる結果を確認できる唯一の方法ですが、動的プログラミングが進むべき道であることはわかっています。

人々はこれをどのように行うのですか?そして、あなたが他の同様の例を提供できれば、それは素晴らしいことです。

4

2 に答える 2

2
var spawnLocs = new SpawnLocation[10];
if (RandomPosition)
{
    for (int i = 0; i < spawnLocs.Length; i++)
    {
        spawnLocs[i] = // auto define using algorithm / logic
    }
}
else
{
    spawnLocs[0] = // manually define spawn location
    spawnLocs[1] = 
    ...
    ...
    spawnLocs[9] = 
}

新しい敵をスポーンします:

void SpawnEnemy(int spawnedCount)
{
    if (EnemyOnMap < 10 && spawnedCount < 100)
    {
        var rd = new Random();
        Enemy e = new Enemy();
        SpawnLocation spawnLoc = new SpawnLocation();
        bool locationOk = false;
        while(!locationOk)
        {
            spawnLoc = spawnLocs[rd.Next(0, spawnLoc.Length)];
            if (!spawnLoc.IsOccupied)
            {
                locationOk = true; 
            }
        }
        e.SpawnLocation = spawnLoc;

        this.Map.AddNewEnemy(e);
    }
}
于 2013-01-22T07:30:20.647 に答える
1

位置を配列やリスト、または目的に合ったデータ形式として指定し、各敵の入力から読み取り、対応する位置を見つけて設定する3行のループを実装するだけです。

ほとんどの言語には、たとえばC#のように、配列またはリストのデータを直接提供するためのある種の「省略形」形式があります。

var myList = new List<EnemyPosition>{
                          new EnemyPosition{ x = 0, y = 1 },
                          new EnemyPosition{ x = 45, y = 31 },
                          new EnemyPosition{ x = 12, y = 9 },
                          (...)
                };

必要なときにデータを取得するためのインターフェイスがあれば、当然、同じデータをXMLファイル、データベース、または祖母の食器棚に入れることができます。

次に、質問と同じように、ループを設定できます。

于 2013-01-22T07:32:10.930 に答える