Sudoku

深入探索数字九宫格:Sudoku求解算法与实践 约束满足问题(Constraint Satisfaction Problem,CSP)是人工智能领域中用于解决约束系统的模型之一。它关注的是在一组变量之间,通过满足一定约束条件来寻找一组变量的赋值,使得所有约束得到满足。CSP模型由三部分构成:- 一个变量集合;- 每个变量的定义域,即变量可能取的值;- 一组约束,限制了变量的取值组合。CSP的特征在于变量间存在依赖关系,通过约束对变量的取值进行限制,需要找到满足所有约束的变量赋值。 阅读详情

首先是游戏界面的设计:

以下三图分别为登陆注册/难度选择/游戏界面




登陆注册利用SQLITE实现,在引用SQLite for Universal Windows Platform和SQLitePCL,然后在登陆和注册按钮处分别添加CLICK事件:

private void add_database()
        {
            string tit = textBox.Text;
            //Insert
            var db = App.conn;
            using (var custstmt = db.Prepare("INSERT INTO User (Name) VALUES (?)"))
            {
                custstmt.Bind(1, tit);
                custstmt.Step();
            }
        }


        private bool BtnGetAll()
        {
            var db = App.conn;
            string word = textBox.Text;
            StringBuilder re = new StringBuilder();
            using (var statement = db.Prepare("SELECT Name FROM User WHERE Name = ?"))
            {
                statement.Bind(1, word);
                while (SQLiteResult.ROW == statement.Step())
                {
                    re.Append((string)statement[0]);
                    if (re.ToString() == word) return true;
                }
            }
            return false;
        }

然后是游戏难度的选择,在这个游戏里,我使用一个静态类来保存游戏信息

namespace Sudoku.Models
{
    public static class GameInfo
    {
        public static string GameLevel;
        public static int time;
        public static string UserName;
    }
}

接着进入游戏:

我使用了一个MODELS存储数独游戏过程中的每一步骤:

每一步用一个ITEM表示,数独九宫格里的数据用二维数组存储:

namespace Sudoku.Models
{
    class SudokuItem
    {
        public int[,] map;
        public SudokuItem(int[,] map) {
            this.map = new int[9,9];
            for (int i = 0; i < 9; i++)
                for (int j = 0; j < 9; j++)
                    this.map[i, j] = map[i, j];
        }
    }
}


把每一步装在collection中:
namespace Sudoku.ViewModels
{
    class SudokuItemViewModel
    {
        private ObservableCollection<Models.SudokuItem> allItems = new ObservableCollection<Models.SudokuItem>();
        public ObservableCollection<Models.SudokuItem> AllItems { get { return this.allItems; } }

        private Models.SudokuItem selectedItem = default(Models.SudokuItem);
        public Models.SudokuItem SelectedItem { get { return selectedItem; } set { this.selectedItem = value; } }



        public SudokuItemViewModel()
        {
            //test

        }
        public void AddSudokuItem(int[,] map)
        {
            this.allItems.Add(new Models.SudokuItem(map));

        }
        public void RemoveSudokuItem()
        {
            
        }
        public void UpdateSudokuItem()
        {
            // set selectedItem to null after update
            this.selectedItem = null;
        }
    }
}

在XAML里,用Grid控件划分出一个9x9的区域:

<Grid Name="grid" Grid.Row="0" >
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                                <RowDefinition Height="0.1*"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="0.1*"/>
                            </Grid.ColumnDefinitions>
                        </Grid>

然后在C#中往每个格子添加一个button,并为每个button绑定一个二维数组即题目,还可以添加背景图片:

        private void InitMap(Grid thegrid,int[,] initmap)
        {
            thegrid.Children.Clear();

            for (int i = 0; i <= 8; i++)
            {
                for (int j = 0; j <= 8; j++)
                {
                    int fontsize = 20;
                    Button numberGrid = new Button() { Tag = i.ToString() + j.ToString(), FontSize = fontsize};
                    numberGrid.SetValue(Grid.RowProperty, i);
                    numberGrid.SetValue(Grid.ColumnProperty, j);
                    if (initmap[i,j] == 0)
                    numberGrid.Click += new RoutedEventHandler(ChooseButton);
                    gridinfo.X = i;
                    gridinfo.Y = j;
                    Binding binding = new Binding();
                    binding.Source = gridinfo;
                    binding.Converter = new Converter();
                    numberGrid.SetBinding(Button.ContentProperty, binding);
                    numberGrid.Width = numberGrid.Height = 34
                    if (initmap[i, j] > 0 || !(thegrid == grid || thegrid == draftgrid))
                    {
                        numberGrid.Background = new ImageBrush
                        {
                            ImageSource = new BitmapImage(new Uri(base.BaseUri, "Assets/darkGridItem.png"))
                        };
                    }
                    else {
                        numberGrid.Background = new ImageBrush
                        {
                            ImageSource = new BitmapImage(new Uri(base.BaseUri, "Assets/lightGridItem.png"))
                        };
                    }
                    numberGrid.Content = (initmap[i, j] < 1) ? "" : numberGrid.Content;
                    thegrid.Children.Add(numberGrid);
                }
            

数独九宫格的更新:

        private void UpdateMap(Grid thegrid, int[,] map)
        {
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    var btn = thegrid.Children[i * 9 + j] as Button;
                    btn.Content = map[i, j] != 0 ? map[i, j].ToString() : "";
                }
            }
        }

计时器的实现:

DispatcherTimer myTimer = new DispatcherTimer();
            myTimer.Interval = new TimeSpan(0, 0, 1);//获取或设置计时器刻度之间的时间段——设置myTimer的时间间隔是1秒  
            myTimer.Tick += Timer_Tick;//Tick是超过计时间隔发生的事件——即超过1秒触发事件Timer_Tick  
            myTimer.Start();//计时器开始



【实战指南】Jaspersoft Studio + JasperReports:从零构建企业级PDF报表 本文详细介绍了如何使用Jaspersoft Studio和JasperReports从零构建企业级PDF报表。通过可视化设计、数据连接、模板设计到最终输出的全链路支持,这套组合方案显著降低了报表开发的维护成本。文章还提供了开发环境搭建、中文乱码解决方案、Java集成代码及性能优化技巧,适合需要高效生成复杂PDF报表的开发者。 阅读详情

相关推荐

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 468

Sudoku(数独缩小版(4*4))

题目来源:https://vjudge.net/problem/HDU-5547 【题意】 在含*字符处填入数字,符合数独要求。 【思路】 模板题。dfs+暴力枚举 【代码】#include<map> #include<stack> #include<queue> #include<cstdio> #include<algorithm> #include<cstring> #include

Crazy 3161

chipseeker Y叔

这一次讲解非常重要的peak注释,注释在ChIPseeker里只需要用到一个函数annotatePeak,它可以满足大家各方面的需求。 输入 当然需要我们上次讲到的BED文件,ChIPseeker自带了5个BED文件,用getSampleFiles()可以拿到文件的全路径,它返回的是个named list,我这里取第4个文件来演示。annotatePeak的输入也可以是GRanges对象,你如果用R做peak calling的话,直接就可以衔接上ChIPseeker了。 require(ChIPseeke

生信小博士的博客 1589

数独(SuDoku)介绍

数独(SuDoku)介绍http://blog.youkuaiyun.com/lihongzhai/ 日期:2005-10-11 04:49:24 数独(日语:数独 すうどく)是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一

五角大寨 3809

Win11下Python脚本不执行?5分钟搞定PATH环境变量配置(VSCode终端实测)

本文针对Win11系统下VSCode终端中Python脚本执行无响应的问题,提供了详细的诊断与解决方案。核心在于正确配置PATH环境变量,通过图形化界面调整Python路径优先级,并分享了VSCode终端环境变量的刷新技巧,帮助开发者在5分钟内快速解决环境配置难题。

weixin_28358083的博客 384

AWR1642+DCA1000EVM 不使用mmWave Studio软件采集原始ADC数据 Timeout问题汇总

DCA1000 EVM Timeout问题汇总

Jesy_Hsu的博客 1476

C++小游戏(原创)——数独(sudoku)

  #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;time.h&gt; #include &lt;cstdlib&gt; #include&lt;windows.h&gt; using namespace std; int a[15][15],ans_pre,ans[15][15],b[15][15]; ...

Ziwen_的博客 8155

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 931

(hdu)5547 Sudoku (4*4方格的 数独 深搜)

Problem Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself. It looks like the modern Sudoku, but smaller. Actually, Yi Sima was playing it diffe...

weixin_30341735的博客 244

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4209

基于深度学习的垃圾邮件识别

垃圾邮件的大量存在严重威胁着电子邮件系统的安全和效率。基于深度学习的垃圾邮件识别技术已经成为目前最有效的解决方案之一。本文将详细介绍使用深度学习技术进行垃圾邮件识别的方法,并提供相应的代码实现。 随着电子邮件的广泛应用,垃圾邮件的数量不断增加,传统的规则和统计方法已经无法满足对垃圾邮件进行准确识别的需求。深度学习技术以其强大的模式识别能力和自动特征提取能力成为解决垃圾邮件识别难题的有效工具。

一键难忘的博客 1093

HDU-6341:Problem J. Let Sudoku Rotate(DFS)

Problem J. Let Sudoku Rotate Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem Description Sudoku is a logic-based, combinatorial number-placement puzzle, ...

Mitsuha_的博客 1229

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode:Valid Sudoku与Sudoku Solver

Valid Sudoku1、题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’. Note: A

zems 418

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ 3074 Sudoku 解题报告(Dancing Link)

Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7878   Accepted: 2792 Description In the game of Sudoku, you are given a large 9 × 9 grid divided

SF-_- 的 ACM 博客 1162

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode - Sudoku Solver

https://leetcode.com/problems/sudoku-solver/ 这道题我发现大部分的解决方法都是加一个isValid函数,来判断当前数字是否合法。 比如: http://blog.youkuaiyun.com/linhuanmars/article/details/20748761 http://www.ninechapter.com/solutions/sudoku-s

chilakaka的专栏 312

Sudoku-JS 开源项目教程

Sudoku-JS 开源项目教程 1. 项目介绍 Sudoku-JS 是一个基于 JavaScript 的数独小游戏项目。该项目使用 ES6、jQuery 和 Less 完成,主要针对电脑端用户。项目包含了数独的核心算法、UI 布局以及生成数独游戏的逻辑。通过该项目,开发者可以学习到如何使用现代前端技术构建一个简单的游戏应用。 2. 项目快速启动 2.1 环境准备 在开始之前,请确保你已经安装了以...

gitblog_00629的博客 1145

Sicily 1002. 数独游戏(sudoku)

Description Even最近迷上了一种游戏,叫做Sudoku。Sudoku是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数字谜题。Sudoku游戏的盘面是个九宫格,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次。 Even很

菜鸟的博客 1088

poj2676Sudoku

虽然做了两次了,但还是没有一遍完整的把代码敲下来,可能深搜用的还不娴熟,好多细节没有考虑到,遇到这种;类似的问题一筹莫展,还是自己比较渣,现在是一个瓶颈把,提高比较慢(强行安慰自己......)

W_904038290的博客 360

D. Anti-Sudoku

链接:https://codeforces.ml/contest/1335/problem/D You are given a correct solution of the sudoku puzzle. If you don't know what is the sudoku, you can read about ithere. The picture showing the corre...

Luoriliming的博客 534

POJ3074 Sudoku —— Dancing Links 精确覆盖

题目链接:http://poj.org/problem?id=3074 Sudoku Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10451   Accepted: 3776 Description In the game of Sud

A man can be destroyed, but not defeated. 636

37. Sudoku Solver

采用DFS,搜索所有排列。理论上有9的9次方种排列(每行)。一共9行,共9的81次方。但是,排列的位置关系已经定了,因为格子是固定的。 在这个基础上,还规定了Sudoku rule,以及固定了很多数字,把搜索空间进一步缩小。以至于人可以用眼和脑在短时间解决。 所以我们采用排列的形式:递归,用数组记录used情况,无效状态剪枝,有效状态返回。 返回条件(Goal): 当所有的格子都放好的时候。ro...

SpanningWings的博客 233

Sudoku(POJ 2676)

Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from

luckyrass的专栏 499

POJ 2676 Sudoku

Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11054   Accepted: 5493   Special Judge Description Sudoku is a very simple task. A square table with 9

ACM2272902662的专栏 600

sudoku me_Sudoku,一个完整的MFC应用程序。 第4部分

sudoku me 介绍: (Introduction:) 在状态栏上显示信息。 Continuing from the third article about sudoku. 继续关于数独的第三篇文章。 Open the pr...

cunchi8090的博客 277

Sudoku.js 项目教程

Sudoku.js 项目教程 1. 项目目录结构及介绍 sudoku.js/ ├── js/ │ ├── README.md │ ├── sudoku.js │ └── ... ├── LICENSE ├── package.json └── ... 目录结构说明 js/: 包含项目的主要代码文件,如 sudoku.js 和 README.md。 LICENSE: 项目的开源许可证...

gitblog_01176的博客 389
下一篇: AngularJs学习笔记(一)初认识AngularJs
zengxl__
博客等级 码龄11年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值