首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成卡坦数字的定居者?

生成卡坦数字的定居者?
EN

Stack Overflow用户
提问于 2014-10-24 08:23:02
回答 2查看 913关注 0票数 1

我正在尝试生成一个Catan游戏板的定居者,并试图创建一个高效的十六进制数字的实现。

其目标是从2-12随机生成一组数字(只有一个2和12的实例,以及两个介于两者之间的所有数字的实例),确保值6和8不是六边形(?)彼此相邻。6和8是特别的,因为它们是你最有可能滚动的数字,所以游戏不想让它们彼此相邻,因为玩家获得了不成比例的更高的资源。A 7意味着你必须丢弃资源。

预期结果:http://imgur.com/Ng7Siy8

现在,我有一个非常慢的蛮力实现,我希望优化它,但我不确定如何。实现是在VBA中,这限制了我可以使用的数据结构。

在伪代码中,我所做的事情如下:

代码语言:javascript
运行
复制
For Each of the 19 hexes
    Loop Until we have a valid number
        Generate a random number between 1 and 12
        Check
            Have we already placed too many of that number?
            Is the number equal to 6 or 8?
                Is the number being placed on a hex next to another hex with 6 or 8 placed on it?
        If valid
            Place
        If invalid
            Regenerate random number

这是非常手动和随机生成器功能,这意味着它可以是任何地方,从真的很短,真的很长(复合超过19个六进制)。

注意:我的数字被放置的方式似乎很重要。我从游戏板的外面开始(参见这里的http://imgur.com/Ng7Siy8),在灰色六角形上用数字6,然后逆时针方向向内移动。这意味着我的下一个十六进制是2浅绿色,4轻orange...continuing左右9深绿色,然后向内4浅橙色。

这种模式限制了我需要进行的比较的数量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 08:43:50

你可以做几个优化-首先,你知道每个瓷砖上有多少个数字--你有2,3,3,4,4,5,5,6,6,8,8,9,9,10,10,11,11,12。因此,从这组数字开始--如果生成的数字太多,您将取消检查。现在,您可以对这组数字进行随机洗牌,并检查它是否“有效”。这仍然会导致太多的负面检查,我认为,但它应该比你目前的方法表现更好。

票数 3
EN

Stack Overflow用户

发布于 2014-10-24 17:25:48

先放置8块,然后计算出你愿意把6块放在哪一块(即不相邻),然后随机选择6块,然后把其余的放在上面。

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

https://stackoverflow.com/questions/26544081

复制
相关文章

相似问题

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