首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态编程与动态编程

静态编程与动态编程
EN

Stack Overflow用户
提问于 2013-01-22 15:20:09
回答 2查看 1.2K关注 0票数 0

我知道为了清理你的代码,你可以使用循环。也就是说,不是说

代码语言:javascript
复制
myItem = myArray[0]
my2ndItem = myArray[1]

最多100个元素会占用100行代码,而且会很难看。它可以瘦身,看起来不错/使用循环会更有效率。

假设你正在创建一个游戏,你有100个非玩家控制的敌人,它们在一个确切的位置产生,每个位置都不同。

你到底是如何在不使用100行代码的情况下生成每一行代码的呢?我可以理解,比如说,如果你想让它们都相距25码,你可以只使用一个循环并递增25码。

因此,在这种情况下,静态编程是我看到可能结果的唯一方法,但我知道动态编程是可行的方法。

人们如何做到这一点呢?如果你能提供其他类似的例子,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-22 15:30:21

代码语言:javascript
复制
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] = 
}

产生新的敌人:

代码语言:javascript
复制
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);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-01-22 15:32:11

只需将位置指定为数组或列表或任何适合的数据格式,然后实现一个3行的循环,该循环从每个敌人的输入中读取,并找到并设置相应的位置。

大多数语言都有某种“速记”格式,用于直接为数组或列表提供数据,例如在C#中:

代码语言:javascript
复制
var myList = new List<EnemyPosition>{
                          new EnemyPosition{ x = 0, y = 1 },
                          new EnemyPosition{ x = 45, y = 31 },
                          new EnemyPosition{ x = 12, y = 9 },
                          (...)
                };

您可以很自然地将相同的数据放入XML文件、数据库或您的祖母的橱柜中,只要您有一些接口可以在需要时检索它。

然后,您可以使用循环来设置它,就像在您的问题中一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14453450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档