日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【推荐】极简数独1.0源码

發(fā)布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【推荐】极简数独1.0源码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

???? 前一段時間迷上數獨,于是自己做了一個,仿MetroUI,看著蠻簡單。如下:

???

???? 支持自定義背景,快捷鍵等!

???? 由于自知算法不是很好,所以在做這個的時候,使用了一些小技術!

????

???? 大概說一下,具體的結構!

???????????????????

???? 有四個小項目,從上到下,分別是:

???? Sudoku.CodeMonk(我自己實現(xiàn)的一個數獨)

???? Sudoku.Common(數獨接口和其他的公用類)

???? Sudoku.Test(測試項目)

???? Sudoku.WinForm(WinForm版的數獨)

???? 當然最關鍵的肯定是那個ISudoku接口,它定義了一系列的數獨操作,比如生成數獨,打開和保存數獨,撤銷重復等!具體如下:

View Code using System;
using System.Collections.Generic;

namespace Sudoku.Common
{
public delegate void FinishHandler();

/// <summary>
/// 數獨接口
/// </summary>
public interface ISudoku:IDisposable
{
event FinishHandler OnInitializeFinish;

event FinishHandler OnLoadFinish;

/// <summary>
/// 設置點
/// </summary>
/// <param name="x">x坐標</param>
/// <param name="y">y坐標</param>
/// <returns></returns>
byte this[byte x, byte y] { get; set; }

/// <summary>
/// 載入數獨
/// </summary>
/// <param name="path">路徑</param>
void Load(string path);
/// <summary>
/// 保存數獨
/// </summary>
/// <param name="path">路徑</param>
void Save(string path);

/// <summary>
/// 撤銷
/// </summary>
void Undo();
/// <summary>
/// 重復
/// </summary>
void Redo();
/// <summary>
/// 重置
/// </summary>
void Reset();

/// <summary>
/// 初始化數獨
/// </summary>
void Initialize();

/// <summary>
/// 獲取數獨數據
/// </summary>
/// <returns></returns>
byte[,] Current { get; }
/// <summary>
/// 原數組
/// </summary>
byte[,] Original { get; }
/// <summary>
/// 等級
/// </summary>
byte Level { get; set; }

/// <summary>
/// 是否完成
/// </summary>
bool IsFinish { get; }

/// <summary>
/// 設置或獲取數獨的解決方法
/// </summary>
ISudokuSolution Solution { get; set; }
/// <summary>
/// 使用內置的解決方法解決當前數獨
/// </summary>
void Solve();

/// <summary>
/// 檢測該位置的點是否能放置
/// </summary>
/// <param name="row">行坐標</param>
/// <param name="col">列坐標</param>
/// <param name="value"></param>
/// <returns>如果能放置則返回true</returns>
bool CanSet(byte row, byte col, byte value);
/// <summary>
/// 獲取該位置放置的值集合
/// </summary>
/// <param name="row">行坐標</param>
/// <param name="col">列坐標</param>
/// <returns>放置值的集合</returns>
List<byte> CanSetValues(byte row, byte col);
}
}

??? 里面的ISudokuSolution定義了一些解數獨的方法:

View Code using System.Collections.Generic;

namespace Sudoku.Common
{
/// <summary>
/// 數獨解決方法實例
/// </summary>
public interface ISudokuSolution
{
/// <summary>
/// 設置或獲取要解決的數獨
/// </summary>
ISudoku Sudoku { get; set; }

/// <summary>
/// 解決數獨
/// </summary>
/// <returns>解決完成的數獨</returns>
ISudoku Solve();

/// <summary>
/// 檢測該位置的點是否能放置
/// </summary>
/// <param name="row">行坐標</param>
/// <param name="col">列坐標</param>
/// <param name="value"></param>
/// <returns>如果能放置則返回true</returns>
bool CanSet(byte row, byte col,byte value);
/// <summary>
/// 獲取該位置放置的值集合
/// </summary>
/// <param name="row">行坐標</param>
/// <param name="col">列坐標</param>
/// <returns>放置值的集合</returns>
List<byte> CanSetValues(byte row, byte col);
}
}

??? 為了簡單起見,還有一些公用的函數或利用配置文件生成數獨或數獨解決方案的實例!

??? Sudoku.CodeMonk代碼的實現(xiàn)邏輯比較清晰,用的挖洞法來生成數獨的!沒有寫什么具體的數獨解決方法。撤銷和重復使用Stack做的,沒有什么Command模式,覺得比較麻煩。保存和讀取是拿xml序列化和反序列化做的。其他的都是窮舉等笨方法!

??? 比較復雜的一部分就只能算是WinForm項目里的GDI+操作,自定義控件等。

??? 為了讓窗體看起來更Metro一些,我找了些微軟官方的WP開發(fā)圖標。并自定義了一個PicButton,有點小動畫的效果(小動畫哈)。

??? 復雜一點就是自定義的SudokuLabel,具體的話看代碼吧!

? ? Release包下載:sudoku-release.zip

??? 源碼下載:http://files.cnblogs.com/wushilonng/Sudoku.zip
??? Codeplex地址:http://longsudoku.codeplex.com/

?

??? 其他:

??? (1)自定義背景,刪除掉目錄下的background.jpg就會回到默認背景,放一個background.jpg到目錄下就是背景了!

????(2)Ctrl+Z撤銷,Ctrl+Y重復,Ctrl+O打開,Ctrl+S保存,Ctrl+N新建,Ctrl+H輔助解答,Ctrl+R重置!

??? (3)右側的幾個數是用來說明當前格子里可以的填寫的哪些數。

????(4)所謂的小動畫就是圖標稍稍轉一下!

????(5)默認難度是1級(比較弱智),還沒做難度調節(jié),需要改代碼(囧)。

轉載于:https://www.cnblogs.com/wushilonng/archive/2012/03/14/2395743.html

總結

以上是生活随笔為你收集整理的【推荐】极简数独1.0源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜影剧院 | 国产91福利 | 欧美永久 | 亚洲免费成人av | 国产免费黄网站 | 亚洲射吧| 国产日韩欧美综合在线 | 国产精品自拍视频一区 | 国产女人18毛片水18精 | 日批网站在线观看 | 日韩高清一二三区 | 久久丫精品忘忧草西安产品 | 一区免费观看 | 国产黄色小说 | 免费视频一区二区 | 黄色喷水网站 | 日韩欧美国产成人精品免费 | 免费三级av | 一区二区三区黄色片 | 黄色国产精品 | 91在线在线 | 免费网站91| 国产精品99久久久久久www | 久久先锋 | 午夜影院免费版 | 国产精品爽爽久久 | 欧美影院在线 | 一区二区三区天堂 | 日韩在线播放中文字幕 | 春意影院福利社 | 欧美成人天堂 | 特黄老太婆aa毛毛片 | 欧美日本韩国一区二区 | 国产免费一区 | 激情成人综合 | 秋霞电影一区二区 | 一级欧美在线 | 在线免费观看污网站 | 粉嫩欧美一区二区三区 | 亚洲爱爱网| 日本少妇一区二区三区 | 天天想你在线观看完整版电影免费 | 日韩特级片 | 国产美女明星三级做爰 | 国产精品白嫩极品美女视频 | 中文字幕人妻精品一区 | 丁香花电影高清在线阅读免费 | 一区二区在线观看视频 | 精品久久9999 | 爱福利视频网 | 久艹在线观看 | 高清av网 | 好看的黄色录像 | 精品不卡一区二区三区 | japanese av在线| 含羞草一区二区 | 国产无遮挡裸体免费视频 | 激情黄色小视频 | 亚洲精品视频三区 | 女女同性女同一区二区三区按摩 | 护士的小嫩嫩好紧好爽 | 高跟鞋av| 在线观看成人免费视频 | 精品亚洲在线 | 98超碰在线| 91精品国产一区二区在线观看 | 亚洲av成人精品一区二区三区在线播放 | 嫩草99 | 成人一区二区三区在线 | 免费毛片视频 | 枫可怜av | 免费不卡av在线 | 91情侣视频 | 手机在线观看av | 99国产在线视频 | 欧美久久久久久 | 亚洲永久免费观看 | 啪啪网视频 | 免费午夜激情 | 欧美日韩一区二区三区不卡视频 | 91成人看| 午夜免费体验区 | 精品国产黄色片 | 日日爽天天 | 久久婷婷亚洲 | 午夜刺激视频 | 超碰97人人射妻 | 高清欧美精品xxxxx在线看 | 中文字幕第一区综合 | 久久黄色录像 | 久久香蕉精品 | 秋霞欧洲 | 91精品国产91久久久久福利 | 永久免费在线视频 | 天堂av.com| 日日夜夜狠狠干 | 国产一区精品久久 | 久久综合狠狠综合久久综合88 | 久久久精品美女 |