静态与动态编程

时间:2013-01-22 07:20:09

标签: c# dynamic static

我知道为了清理代码,你需要使用循环。即而不是说

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

直到元素100左右将需要100行代码并且会很难看。 它可以精简,使用循环看起来很漂亮/效率更高。

假设您正在创建一个游戏,并且您拥有100个非玩家控制的敌人,这些敌人会在一个确切的位置产生,每个位置都不同。

如果不使用100行代码,你究竟会如何产生每一个? 我可以理解,例如,如果你想要它们相隔25码,你可以使用一个循环并增加25。

所以说,在这种情况下静态编程是我能看到可能结果的唯一方法,但我知道动态编程是要走的路。

人们如何做到这一点?如果你能提供其他类似的例子那么棒。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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文件,数据库或祖母的橱柜中,只要您有一些界面可以在需要时检索它。

然后您可以使用循环进行设置,就像您的问题一样。