跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

使用Xamarin开发移动应用示例——数独游戏(四)产生新游戏算法改进

精选回复

发布于

项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu 。代码随项目进度更新。

前面我们使用一个数组保存预制的游戏,然后随机从中抽取一个游戏作为新游戏,如果我们数组中有10个游戏,那么很快就会遇到重复的游戏,有没有办法在现有的基础上生成更多的游戏呢?我们看一下下面两个游戏:

4131-20220126212732917-1025253331.jpg4131-20220126212832353-2030343409.jpg

看上去是不同的游戏,但仔细分析一下就会发现如果从计算机角度看,其实是相同的游戏。如果我们仔细分析一下,就会发现,在数独游戏中1-9的数字都是独立的符号,没有数学中数字的意义,如果将这些数字换成A-H的字母,同样可以按照相同的规则进行游戏,或者换成九种水果、动物什么的,都可以。那么如果我们有九种局面,通过替换各种局面中的数字,就可以得到更多的游戏局面,对人类玩家是不太容易分辨出不同的。我们在现有算法的基础上进行改进,再取一个0到9的随机数,将这个数加到现有局面的每个数字上,如果所得大于9,就减去9,这样就可以根据每个局面,产生9个不同的游戏。修改后的代码如下:

     private async Task SetNewGame()
        {
            int k,m;
            var lst = chesses;
            var leng = lst.GetLength(0);
            
            if (ra == null)
            {
                ra = new Random();
            }

            k = ra.Next(0, leng);
            m = ra.Next(0, 9);
            var sudoku = lst[k].Sudoku;
            var mychess = new int[9, 9];
            for (var i = 0; i < 9; i++)
                for (var j = 0; j < 9; j++)
                {
                    mychess[i, j] = int.Parse(sudoku.Substring(i * 9 + j, 1)) > 0 ? int.Parse(sudoku.Substring(i * 9 + j, 1)) + m : 0;
                    if (mychess[i, j] > 9) mychess[i, j] = mychess[i, j] - 9;
                }

            SetGame(mychess);
        }

上面算法中k是从现有列表中随机选择一组数据,m是生成0到9的随机数,在现有的数字上加上m,如果大于9,就减去9。
下一步我们增加保存状态的功能。

本文来自博客园,作者:寻找无名的特质,转载请注明原文链接:https://www.cnblogs.com/zhenl/p/15848219.html

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。