freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于wpf的數(shù)獨(dú)游戲的開發(fā)畢業(yè)設(shè)計(jì)-預(yù)覽頁

2025-08-19 12:01 上一頁面

下一頁面
 

【正文】 玩法簡單,但數(shù)字排列方式卻千變?nèi)f化,所以不少教育者認(rèn)為數(shù)獨(dú)游戲是訓(xùn)練頭腦的絕佳方式。對本研究提供過幫助和做出過貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說明并表示了謝意。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。玩家必須在一個(gè)已經(jīng)填充有幾個(gè)數(shù)字的 n n 矩陣中填入數(shù)字,使得每一行、列和宮格里的數(shù)字不重復(fù)。主要使用的技術(shù) WPF( Windows Presentation Foundation)的開發(fā)技術(shù),是微軟新一代圖形系統(tǒng)。本論文著眼于 WPF 技術(shù)的應(yīng)用,開發(fā)一款具有精致美觀 界面 的 Windows 游戲程序 —— 數(shù)獨(dú)。選擇以 WPF 技術(shù)開發(fā)是因?yàn)?WPF 其實(shí)不僅僅是圖形引擎而已,它將給 Windows 應(yīng)用程序的開發(fā)帶來一次革命,因?yàn)樗募軜?gòu)提供了一種嶄新的開發(fā)模式。開發(fā)一款 WPF 版的數(shù)獨(dú)游戲不但可以檢驗(yàn)自己大學(xué)四年的學(xué)習(xí)成果,也可以為廣大數(shù)獨(dú)愛好者提供一個(gè)良好的游戲體驗(yàn)過程,可謂一舉兩得。 20 多年前,美國人重新挖掘它的魅力,接著日本雜志出版商在八○年代末期 的 一本美國雜志上看到這個(gè)游戲,帶回日本后,增加它的游戲難度,提出了“獨(dú)立的數(shù)字”的概念,意思就是“這個(gè)數(shù)字只能出現(xiàn)一次”或者“這個(gè)數(shù)字必須是惟一的”,并將這個(gè)游戲命名為“數(shù)獨(dú)”( Sudoku)。有些人認(rèn)為玩數(shù)獨(dú)是緩解工作壓力的最佳方式;有些人認(rèn)為玩數(shù)獨(dú)可以保持頭腦靈活,尤其適合老年人;也有些老師認(rèn)為玩數(shù)獨(dú)需要耐心、專心和推理能力,所以拿數(shù)獨(dú)當(dāng)題目給學(xué)生練習(xí)。 .NET Framework 默認(rèn)內(nèi)置于 Vista 操作系統(tǒng)中,并擔(dān)當(dāng)最主要的應(yīng)用程序接口。與 Web程序類似, WPF 應(yīng)用程序可以將功能與 UI 設(shè)計(jì)分離,這些功能使用“代碼隱藏”的思路來驅(qū)動(dòng)。它將徹底改變應(yīng)用程序的用戶體驗(yàn),支持豐富的、具有炫麗視覺效果的交互式體驗(yàn),并且可以隨處實(shí)現(xiàn) :無論是在瀏覽器內(nèi)、在移動(dòng)設(shè)備上,還是在桌面操作系統(tǒng)中 [1]。從那以后, Windows 進(jìn)步被更新和 加強(qiáng),最戲劇性的是 Microsoft Windows NT (1993) 和 Windows 95 (1995), Windows 從 16 位體系結(jié)構(gòu)升級(jí)到 32 位的體系結(jié)構(gòu)。 表格 22使用基于 C語言開發(fā)的 Windows 應(yīng)用程序 引進(jìn)年份 語言 接口 1985 C Windows API 3 1992 C++ MFC 20xx C Windows Forms 20xx C Windows Presentation Foundation 過去幾年采用的主流 Windows 開發(fā)技術(shù)是 MFC和 Windows Forms,下面將其與 WPF 開發(fā)相比較: A. 界面顯示速度。 Windows Forms 是基于 GDI+的,沒有硬件加速。 C. 開發(fā)靈活性和美觀上, WPF 遠(yuǎn)高于 Windows Forms 和 MFC, MFC 要開發(fā)出一個(gè)華麗的 UI極其 困難,而 WPF 不需要使用商業(yè)控件就可以很容易就做出 Windows 7 那樣的 UI 特效。 WPF 大有取代 Windows Forms 和 MFC 之勢,從 未來 的發(fā)展看, MFC 會(huì)變成一種經(jīng)典,作為一種技術(shù)來供開發(fā)者學(xué)習(xí)。 B. 使用現(xiàn)代的軟件設(shè)計(jì) —— 當(dāng) Windows 的圖形分系統(tǒng)最初被創(chuàng)造時(shí),面向?qū)ο蟮拈_ 發(fā)、設(shè)計(jì)模式,還有垃圾收集這類的事情是不存在的或 者并不成熟的。 數(shù)獨(dú)的通解方法 數(shù)獨(dú)解法全是由規(guī)則衍生出來的,基本解法分為兩類思路,一類為基礎(chǔ)摒除法,一類為 唯一法 [9]。尋找列摒除解:找到了某候選數(shù)在某列可填入的位置只余一個(gè)的情形 , 亦即找到了該數(shù)在該列中的填入位置。當(dāng)某列已填數(shù)字的宮格達(dá)到 8 個(gè) , 那么該列剩余宮格能填的數(shù)字就只剩下那個(gè)還沒出現(xiàn)過的數(shù)字了,成為列的唯一解。 技術(shù)可行性 .NET Framework 提供了豐富的 公共語言運(yùn)行庫和基類庫 ,對于本游戲的開發(fā)可以簡化編碼,避免不必要的錯(cuò)誤。 系統(tǒng)安全性分析 游戲使用到的解題器是經(jīng)過 動(dòng)態(tài)加載預(yù)編譯 模塊實(shí)現(xiàn)的, 為了幫助保護(hù)計(jì)算機(jī)系統(tǒng)防止受信任的代碼有意或無意地危害安全 ,使用了 .NET Framework 提供了一種稱為 “代碼訪問安全性 ”的安全機(jī)制 。當(dāng)垃圾回收器執(zhí)行回收時(shí),它檢查托管堆中不再被應(yīng)用程序使用的對象并執(zhí)行必要的操作來回收它們占用的內(nèi)存 [10]。 下面介紹用戶功能, 圖表 31 用戶功能用例圖 為用戶功能用例圖,是用戶直接使用的游戲功能,其功能主要通過鼠標(biāo)操作完成。 D. 游戲設(shè)定:包括設(shè)定游戲生成方法、游戲時(shí)間難易程度和游戲規(guī)格等。 模塊內(nèi)部關(guān)系說明 模塊內(nèi)部關(guān)系說明模塊之間的聯(lián)系是通過內(nèi)部數(shù)據(jù)實(shí)現(xiàn)的,下面介紹模塊之間的聯(lián)系。 當(dāng)用戶按鍵時(shí)觸發(fā) UI 的繪圖,同時(shí)后臺(tái)的代碼處理按鍵事件,從而使得綁定到前臺(tái)的內(nèi)部數(shù)據(jù)改變。在此,設(shè)計(jì)類用以封裝所需要的字段和方法,這樣就可以實(shí)現(xiàn)游戲的大部分功能。 主要數(shù)據(jù)表示方法: ( 1)棋盤的最小單位 —— 數(shù)格用 Cell 類定義。 ( 3)數(shù)獨(dú)棋盤用 Board 類定義。 快速隨即生成數(shù) 獨(dú)題目 一種創(chuàng)建數(shù)獨(dú)迷局的方法是通過使用窮舉法( Brute Force),通過這種方法可以快速生成大量不同的題目。目前 ,對于 9 9 的數(shù)獨(dú)只要 18 個(gè)數(shù)字就可以產(chǎn)生出唯一解的數(shù)獨(dú)謎題。 本游戲采用的快速生成游戲的實(shí)現(xiàn)方法:隨機(jī)生成一個(gè)數(shù)填充隨機(jī)的還沒有值的數(shù)格,并檢測該數(shù)所在的行、列和宮格是否已經(jīng)有此數(shù) 。實(shí)現(xiàn)方法如下:首先在將一個(gè)隨機(jī)數(shù)填入空白棋盤里隨機(jī)的一個(gè)數(shù)格,然后讓解題器填充上剩下的所有數(shù)格,接下來就是再挖空一定的數(shù)格。雖然,理論上遞歸回溯算法需要多次的調(diào)用函數(shù)自己,需增加額外的系統(tǒng)堆棧,可能消耗大量空間,對執(zhí)行效率有一 定的影響。在遞歸之前,可以通過一點(diǎn)小小的預(yù)處理,可以使遞歸算法時(shí)間縮短,這個(gè)處理可以稱為“有限遞推” [13],算法的大致流程圖如圖表 44 數(shù)獨(dú)遞歸算法流程圖 : 有 限 遞 推 預(yù) 處 理候 選 數(shù) 列 表變 化結(jié) 束開 始從 有 最 少 候 選 數(shù) 列表 選 取 一 個(gè) 數(shù) 猜 想候 選 數(shù) 列 表 都 只剩 一 個(gè) 候 選 數(shù)否否是是 圖表 44數(shù)獨(dú)遞歸算法流程圖 算法主要如下: ( 1)建立一個(gè)數(shù)獨(dú)棋盤結(jié)構(gòu)的候選數(shù)列表里面包含了每個(gè)數(shù)格的候選數(shù),對于已經(jīng)有已知數(shù)的,列表里就只有一個(gè)已知數(shù)。再在次執(zhí)行此過程修訂列表,而修訂之后若還有數(shù)據(jù)改變,那么就 在執(zhí)行此過程了,直到候選數(shù)列表的值不再變化。通過這種方式,若當(dāng)前情況無解的時(shí)候回溯,直到所有的候選數(shù)列表有唯一候選數(shù)。 Solve()方法中則調(diào)用解題器類私有的遞歸解題方法RecursiveSolve(),在每次遞歸解題方法調(diào)用自己前,需要使用深度拷貝方法 DeepCopy()將當(dāng)前對象的所有字段進(jìn)行執(zhí)行逐位復(fù)制使其支持遞歸回溯。當(dāng)然,這些面板都應(yīng)該與分辨率無關(guān),以適應(yīng)不同用戶的顯示器。 SudokuBoard 是通過一系列 10 的嵌套的 ItemsControl 控件來繪制展現(xiàn)棋盤。 游戲菜單設(shè)計(jì) 游戲菜單放在主窗口的左邊,其中包括了游戲主菜單和游戲室設(shè)置,它們都被放置在 Expander控件內(nèi),類似于 Windows 操作系統(tǒng)中窗口左邊的任務(wù)欄,可以展開和收縮。再來是,游戲規(guī)格菜單通過下拉框?qū)崿F(xiàn),默認(rèn)選項(xiàng)是 9 9 的標(biāo)準(zhǔn)游戲規(guī)格。 游戲過程中,當(dāng)被再次點(diǎn)擊之后顏色變暗可以暫停時(shí)間,當(dāng)再次點(diǎn)擊時(shí)可以恢復(fù)倒計(jì)時(shí)。當(dāng)選擇了相應(yīng)的解題器后,將在右邊出現(xiàn)解題器的相關(guān)信息。 在游戲填充完成并且正確的情況下,將會(huì)彈出對話框,以告訴玩家填充正確。復(fù)雜一些的如讀取游戲、保存游戲功能,需要使用系統(tǒng)的文件服務(wù)來實(shí)現(xiàn)。通過 XAML 語言實(shí)現(xiàn)了游戲的 UI 界面。通過 使用 set 訪問器為數(shù)據(jù)成員賦值,使用 get 訪問器檢索數(shù)據(jù)成員的值。 if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(Value))。 if (col 0 || col = ) throw new ArgumentOutOfRangeException(col, col, 非法列索引 )。在生成棋盤迷局全,要先判斷 givens的合法性,避免要生成的已知數(shù)大于棋盤的數(shù)格總數(shù)。 int row = (size)。//產(chǎn)生 19 的隨機(jī)數(shù) if () { //如果這個(gè)數(shù)成立,則標(biāo)識(shí)為只讀 = true。然后填入一個(gè)隨機(jī)數(shù)到一個(gè)隨機(jī)的數(shù)格,接下來調(diào)用解題器 ,通過 ref 關(guān)鍵字 使參數(shù)按引用傳遞 , 然后將解題器填充完成的迷局挖空一定數(shù)目的數(shù)格出來: (ref a)。 if (!) //判斷是否為空值 continue。//如果數(shù)格已經(jīng)有值,將其添加到列表 } else { for (int i = 1。 13 處理過程中查詢每一行、列和宮格查找已知數(shù)和候選數(shù)有沖突的項(xiàng),并將其從列表移走,重復(fù)這一步驟,直到 changeMade 的值為 false: do{ changeMade = false。 //保存排除后的結(jié)果 for (int c = 0。 c size。 r size。 } else if (board[r, c].Count 1 amp。 size = board[r, c].Count。 return true。 根據(jù)設(shè)計(jì)階段的設(shè)計(jì),游戲界面要與分辨率無關(guān),而且能夠動(dòng)態(tài)調(diào)整大小。 游戲設(shè)置也是放置于一個(gè) Expander 控件中,包含游戲生成方法,游戲計(jì)時(shí)難度選擇,游戲規(guī)格的子設(shè)置模塊。 其實(shí)現(xiàn)是在 的頭部加入“ xmlns:clr=clrnamespace:”從而可以使用自定義控件。 如 圖表 53 游戲棋盤與填充菜單 所示是 9 9 規(guī)格的標(biāo)準(zhǔn)棋盤 , 具有藍(lán)色玻璃外觀上的數(shù)字為已知數(shù),通過鼠標(biāo)右鍵點(diǎn)擊待填空格,可以彈出候選數(shù)菜單用于向空的數(shù)格填入數(shù)字。 如 圖表 55 計(jì)時(shí)器的三種狀態(tài) ,計(jì)時(shí)器擁有三種狀態(tài),當(dāng)用戶選用的是有計(jì)時(shí)器的狀態(tài),計(jì)時(shí)器顏色偏亮,其主要是通過外發(fā)光( OuterGlowBitmapEffect)來實(shí)現(xiàn): OuterGlowBitmapEffect GlowSize=10 GlowColor =LimeGreen/ / 當(dāng)暫停計(jì)時(shí),顏色變暗,上方數(shù)字也停止變動(dòng) 。當(dāng)選擇了相應(yīng)的解題器后,將在右邊出現(xiàn)解題器的相關(guān)信息。 標(biāo)題的倒影效果則是通過 VisualBrush 的渲染實(shí)現(xiàn)。調(diào)用后臺(tái)的 NewGame_Click 處理,其主要根據(jù)當(dāng)前所選擇游戲規(guī)格設(shè)置 GameBoard 大小,如果是快速生成方式,調(diào)用 GenerateGame 方法產(chǎn)生謎題。 //調(diào)用使用解題器的生成游戲方法 })。當(dāng)按下保存按鈕的時(shí)候,將以二進(jìn)制格式將對象系列化為流將其寫入磁盤: if ((this) == true) { Stream s = new FileStream(, )。 } 讀取游戲過程也是相類似的,是保存游戲的逆過程。當(dāng)選擇沒計(jì)時(shí)器的時(shí)候,時(shí)間面板將被禁用,計(jì)時(shí)器也會(huì)被設(shè)為禁用。 再次點(diǎn)擊時(shí)候則調(diào)用 ResumeTimer,將時(shí)間恢復(fù),并將棋盤設(shè)為可用。在解題的同時(shí),玩家還可以繼續(xù)游戲。 在 Visual Studio 中, 添加一個(gè) SudokuSetup 的 “安裝 ”項(xiàng)目 ,它能將 文件安裝到目標(biāo)計(jì)算機(jī)的文件系統(tǒng)中 。 為了使程序能夠在客戶端運(yùn)行,需要添加依賴項(xiàng)。 圖表 61 SudokuSetup 的 “安裝 ”項(xiàng)目 的文件系統(tǒng)配置 在添加數(shù)獨(dú)游戲所需的項(xiàng)目輸出文件、 內(nèi)容文件、快捷方式等內(nèi)容后,在“解決方案資源管理器”中的 SudokuSetup 單擊生成,即可生成的 Windows Installer 軟件包 , 如 圖表 62 SudokuSetup 軟件包 。本游戲當(dāng)然或多或少也存在些 bug,主要發(fā)現(xiàn)的 BUG 如下:編寫的遞歸解法,可以實(shí)現(xiàn)大部分題目的解題。 對此的 BUG 的暫時(shí)解決方案是在此期間友情提示玩家,當(dāng)花費(fèi)時(shí)間過長提示玩家重啟程序。在 Windows Vista 以上版本的操作系統(tǒng)中 , WPF可以 充分利用新的 Windows Vista顯示驅(qū)動(dòng)模型 (Windows Vista Display Driver Model,WDDM),相對于 Windows XP 的顯示驅(qū)動(dòng)模型 (Windows XP Display Driver Model, XPDM), WDDM提供了幾處非常重要的改進(jìn)。 目前在 XP 下解決占用 CPU 100%的技巧是,重寫 依賴項(xiàng)屬性的 PropertyMetadata,將 DefaultValue 設(shè)為較低的值: (typeof(Timeline), new FrameworkPropertyMetadata { DefaultValue = 5 })。 添加更多的效果和動(dòng)畫使游戲更具美觀。 游戲開發(fā)所涉及到的 WPF 技術(shù)如數(shù)據(jù)綁定、動(dòng)畫和自定義控件只是冰山一角,后期開發(fā)可以嘗試加入 WPF 技術(shù)中的 3D 圖形,視頻和多媒體應(yīng)用, 將
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1