算法-关于宝石迷阵的生成算法?

意见反馈 意见反馈 主题:991 回复:2082

算法-关于宝石迷阵的生成算法?

灵芸 发布于 2017-10-12 字数 518 浏览 1049 回复 2

宝石迷阵图片

这个游戏大家应该玩过吧?

有几个不同形状的元素
如果一行出现连续的三个,四个,五个元素
或者交叉出现三个,四个,五个元素组成的T,L形状
都可以消除这些元素。
当元素被消除以后,元素上方的元素下落,并生成新的元素填充空白。

问题:

如果是你,如何根据难度,生成相应的元素
要求
初始化的时候,不可以有元素被消除
当元素被消除以后,总是会出现可被消除的组合,不能出现死局

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

虐人心 2017-10-21 2 楼

如果颜色个数是四 那么0 1 2 3三个数字
rand4()生成0-4的随机数

填入一个二维的矩阵 (矩阵初始值可以设置为-1)
然后写个方法验证下 填写这个元素在矩阵这个位置可不可以
如果不可以就从新生成随机数 填入矩阵
至于判断矩阵某个位置可以填入元素么 因为下 右都是-1 所以不用判断

只要判断下左边和上面
如果左边是相同数字 那么 再看左边的左边 是不是也是相同颜色
如果是的话 就可以说明这个颜色不能填入 然后回去重新生成随机数字 当然可以直接排出那个上次失败的随机数字
然后直到充满二维数组就可以了

归属感 2017-10-20 1 楼

印象中好像很难保证第二个条件。大多数游戏选择在程序判断死局的时候自动重新洗牌。
至于第一个,每次随机生成之后用程序判断有没有能消的,如果有就重新生成或者做细微的调整,虽然效率低点,对游戏来说还是可以接受的,毕竟问题规模不大。
如果的确希望问题一定有解,可以考虑逆向生成:从全部消除掉的情况开始,每次添加进若干个连续的元素到随机的位置,然后进行一次旋转破换连续关系(这样消除的时候只要反过来旋转就能消掉了),如果一次旋转没有符合条件的就重来这一步。重复这个过程直到格子被完全填满。