惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
Jina AI
Jina AI
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
宝玉的分享
宝玉的分享
C
Check Point Blog
有赞技术团队
有赞技术团队
小众软件
小众软件
IT之家
IT之家
Vercel News
Vercel News
V2EX - 技术
V2EX - 技术
雷峰网
雷峰网
L
Lohrmann on Cybersecurity
Cloudbric
Cloudbric
Engineering at Meta
Engineering at Meta
Schneier on Security
Schneier on Security
P
Privacy International News Feed
Apple Machine Learning Research
Apple Machine Learning Research
W
WeLiveSecurity
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
J
Java Code Geeks
T
Threatpost
S
Secure Thoughts
T
Tailwind CSS Blog
V
V2EX
Attack and Defense Labs
Attack and Defense Labs
P
Palo Alto Networks Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
Simon Willison's Weblog
Simon Willison's Weblog
The Register - Security
The Register - Security
AWS News Blog
AWS News Blog
罗磊的独立博客
GbyAI
GbyAI
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
爱范儿
爱范儿

博客园 - 寻找无名的特质

开源轻量级工作流WorkflowCore介绍 C# 使用SpecFlow创建BDD测试用例 开源的.Net 工作流引擎Elsa初试——创建工作流服务器和图形化工作流配置管理应用 Asp.Net Core Identity 多数据库支持 创建NuGet本地包源 使用Visual Studio 2022开发前端 c# 一些警告的处理方法 Kendo UI Grid 批量编辑使用总结 Kendo UI Grid 使用总结 使用PostMan Canary测试受Identity Server 4保护的Web Api GoJS 使用笔记 Asp.Net Core: Swagger 与 Identity Server 4 VS Code开发TypeScript 使用Xamarin开发移动应用示例——数独游戏(八)使用MVVM实现完成游戏列表页面 使用Xamarin开发移动应用示例——数独游戏(七)添加新游戏 使用Xamarin开发移动应用示例——数独游戏(六)使用数据库 使用Xamarin开发移动应用示例——数独游戏(五)保存游戏进度 使用Xamarin开发移动应用示例——数独游戏(四)产生新游戏算法改进 使用Xamarin开发移动应用示例——数独游戏(二)创建游戏界面
使用Xamarin开发移动应用示例——数独游戏(三)添加回退和计时功能
寻找无名的特质 · 2022-01-26 · via 博客园 - 寻找无名的特质

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

我们已经创建了可以运行数独游戏的基本界面,现在为游戏增加一些功能,首先是计时功能,数独作为一种智力游戏,完成时间是重要的指标。还有就是回退功能,在很多情况下,游戏过程中需要试错,如果进入死局,需要能够回到上几步,再试一个新的路径,如果没有这个功能,只能重新开始,降低游戏的吸引力。

计时功能的实现比较简单,只要在开始和完成时记录时间,计算出时间差并显示就可以了。回退功能可以使用堆栈完成,将每一操作步骤放入堆栈,从堆栈中弹出一条记录,就是回退的一步。

首先增加两个变量,记录开始时间和回退过程:

        private DateTime dtBegin;
        private Stack<string> steps = new Stack<string>();

然后,在开始游戏的时候,记录开始时间,并将堆栈清零:

            steps.Clear();
            dtBegin = DateTime.Now;

            this.lbFinish.IsVisible = false;
            this.lbTime.IsVisible = false;
            this.lbMessage.IsVisible = false;

在输入数字后,记录下输入的位置和值,存入堆栈:


            if (!checkval(x, y, num))
            {
                return;
            }
            steps.Push(x + "," + y + "," + num);
            currentButton.Text = currentNumBtn.Text;

增加响应回退的事件:


        private void btn_Reset_Clicked(object sender, EventArgs e)
        {
            if (steps.Count > 0)
            {
                var laststep = steps.Pop();
               
                var arr = laststep.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                int x = int.Parse(arr[0]), y = int.Parse(arr[1]), num = int.Parse(arr[2]);
                buttons[x, y].Text = "";
            }
        }

在完成的时候,显示耗时时间:

            if (IsFinish())
            {
                lbFinish.IsVisible = true;
                lbTime.IsVisible = true;
                rowResult.Height = 40;
                var diff = (DateTime.Now.Ticks - dtBegin.Ticks) / 10000 / 1000 / 60;
                lbTime.Text = diff + "分钟";
            }

还需要增加新游戏的功能,目前只有一个游戏,再多增加一些,现在只简单实现这个功能,将一些游戏保存在数组中,开始游戏时随机抽取一个。代码如下:

        private static int[,,] chesses =  {
           {
            {5,3,0,0,7,0,0,0,0},
            {6,0,0,1,9,5,0,0,0},
            {0,9,8,0,0,0,0,6,0},
            {8,0,0,0,6,0,0,0,3},
            {4,0,0,8,0,3,0,0,1},
            {7,0,0,0,2,0,0,0,6},
            {0,6,0,0,0,0,2,8,0},
            {0,0,0,4,1,9,0,0,5},
            {0,0,0,0,8,0,0,7,9}
            },
            {
            {3,0,2,4,0,7,9,0,1},
            {0,0,7,1,3,8,5,0,0},
            {6,0,0,0,0,0,0,0,4},
            {0,0,0,0,4,0,0,0,0},
            {0,9,4,0,0,0,1,5,0},
            {0,0,0,0,9,0,0,0,0},
            {4,0,0,0,0,0,0,0,5},
            {0,0,8,9,1,5,6,0,0},
            {5,0,9,6,0,4,7,0,2}
        },{
            {0,8,0,9,0,7,0,1,0},
            {9,0,0,3,8,6,0,0,5},
            {0,0,2,0,4,0,6,0,0},
            {5,9,0,0,0,0,0,2,6},
            {0,2,3,0,0,0,7,9,0},
            {7,4,0,0,0,0,0,5,1},
            {0,0,9,0,7,0,5,0,0},
            {4,0,0,8,5,9,0,0,2},
            {0,5,0,4,0,2,0,3,0}
        },{
            {4,0,8,0,0,0,0,0,5},
            {0,0,9,0,0,4,0,7,0},
            {3,1,0,2,0,0,8,0,0},
            {0,0,5,7,0,0,0,8,0},
            {0,0,0,0,9,0,0,0,0},
            {0,2,0,0,0,3,5,0,0},
            {0,0,2,0,0,9,0,1,4},
            {0,3,0,6,0,0,9,0,0},
            {1,0,0,0,0,0,7,0,6}
        },{
            {0,3,5,0,0,7,0,6,0},
            {8,0,6,0,1,0,0,0,7},
            {0,0,0,0,9,6,0,1,5},
            {4,0,1,8,0,3,0,0,0},
            {0,2,3,0,0,0,6,4,0},
            {0,0,0,6,0,2,3,0,1},
            {3,8,0,7,2,0,0,0,0},
            {6,0,0,0,3,0,7,0,9},
            {0,7,0,9,0,0,4,8,0}
        },{
            {0,0,0,7,0,4,0,0,0},
            {0,0,0,8,0,5,0,0,0},
            {5,8,0,0,0,0,0,4,7},
            {7,6,0,0,0,0,0,3,9},
            {9,2,0,6,1,3,0,7,8},
            {8,5,0,0,0,0,0,2,1},
            {1,7,0,0,0,0,0,9,3},
            {0,0,0,3,0,6,0,0,0},
            {0,0,0,1,0,7,0,0,0}
        },{
            {0,7,0,0,9,0,2,0,0},
            {0,0,0,0,0,7,0,0,5},
            {2,0,4,3,5,0,7,0,0},
            {0,5,0,0,4,0,9,0,0},
            {9,0,3,5,0,1,4,0,8},
            {0,0,7,0,6,0,0,1,0},
            {0,0,8,0,1,9,3,0,2},
            {7,0,0,2,0,0,0,0,0},
            {0,0,2,0,3,0,0,9,0}
        },{
            {3,0,2,4,0,7,9,0,1},
            {0,0,7,1,3,8,5,0,0},
            {6,0,0,0,0,0,0,0,4},
            {0,0,0,0,4,0,0,0,0},
            {0,9,4,0,0,0,1,5,0},
            {0,0,0,0,9,0,0,0,0},
            {4,0,0,0,0,0,0,0,5},
            {0,0,8,9,1,5,6,0,0},
            {5,0,9,6,0,4,7,0,2}
        }
        };

修改生成新游戏的函数:

        private void SetNewGame()
        {
            int k;
            var lst = chesses;
            var leng = lst.GetLength(0);

            if (ra == null)
            {
                ra = new Random();
            }

            k = ra.Next(0, leng);
           
            var mychess = new int[9, 9];
            for (var i = 0; i < 9; i++)
                for (var j = 0; j < 9; j++)
                {
                    mychess[i, j] = chesses[k, i, j];
                }

            SetGame(mychess);
        }

好了,到这里游戏基本上已经初步完成了,项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu 。代码随项目进度更新。
现在可以在手机上启动一个新的游戏试试了,当你玩了一会儿,忽然有个电话进来,接完电话,再回到游戏,What?原来的进度都丢了!下一步我们需要在本地保存当前的进度。