

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 西洋跳棋智能程序設計</p><p><b> 2016年6月</b></p><p> 學 院計算機學院</p><p> 專 業(yè)計算機科學與技術</p><p> 班 級</p><p> 學 號</p><p> 姓
2、 名</p><p> 指導教師</p><p> 負責教師</p><p><b> 摘 要</b></p><p> 隨著社會發(fā)展,科技進步,電腦得以普及。電腦游戲伴隨著網(wǎng)絡和電腦的普及深深的吸引了很多玩家,特別是快節(jié)奏的生活,傳統(tǒng)的兩個人一張桌子的下棋方式逐漸被取締,人機對弈棋牌類電腦游戲被越來越多的人認可
3、。西洋跳棋作為一款益智類棋牌游戲,不僅可以休閑娛樂,達到游戲自身放松的目的,同時,可以鍛煉玩家的思維能力。</p><p> 計算機博弈是非常實際的計算機科學與技術研究課題,也是非常富有挑戰(zhàn)性的人工智能領域的研究方向。西洋跳棋是一種平均分支因子較少的棋種,博弈樹算法可以得到很好地應用。</p><p> 本游戲是利用Qt開發(fā)工具與C++開發(fā)語言,利用搜索算法設計最優(yōu)落子的一款西洋跳棋人
4、機博弈游戲。Qt是一個多平臺的C++圖形用戶界面應用程序框架,一種完全面向?qū)ο蟮牡某绦蜷_發(fā)軟件,具有很好地封裝機制、較高的模塊化程度和良好的應用性。C++是一種應用非常廣泛的面向?qū)ο蟮挠嬎銠C程序設計語言,利用C++語言在游戲中的編程,使得西洋跳棋游戲具有美觀的界面,人機對弈方面電腦具有較高的智商。</p><p> 本文主要是對西洋跳棋設計的詳細闡述,分別從軟件設計背景,需求分析,總體設計和詳細設計深入的介紹了
5、軟件的開發(fā),并通過對軟件的調(diào)試分析詳細介紹了軟件的使用方法,同時,本文深入比較了多種搜素按算法在本設計中的應用。</p><p> 關鍵詞:西洋跳棋;人工智能;Qt;C++</p><p><b> Abstract</b></p><p> With the development of society and the progress
6、 of science and technology, computer has been popularized. Computer games with the popularity of computer networks and deeply attracted a lot of players, especially the fast pace of life, traditional two table chess has
7、gradually been banned, man-machine chess chess computer game is more and more people recognized. As a puzzle game of chess, checkers can not only entertainment, to achieve the goal of their game to relax, at the same tim
8、e, you can e</p><p> Computer game is a very practical computer science and technology research, is very rich challenge in the field of artificial intelligence research direction. Checkers is an average bra
9、nching factor less chess, the game tree algorithm can be applied well.</p><p> The game is using Qt development tools and C + + programming language, using search algorithms for the design of optimal Lazi a
10、 checkers human-computer game.Qt is a multi platform C + + graphical user interface application program framework, a fully object-oriented programming software, has a good encapsulation mechanism and high degree of modul
11、arization and good application of C + + is a kind of widely used object oriented computer programming language, using C + + language in game programming,</p><p> The main purpose of this paper is to checker
12、s design are elaborated in detail, respectively, from the background of software design, demand analysis, general design and detailed design deeply introduced software development, and through the software debugging and
13、analysis of the usage of the software are introduced in detail. At the same time, this paper with various search element according to the algorithm in the design of the application.</p><p> Keywords: checke
14、rs; artificial intelligence; Qt; C++</p><p><b> 目 錄</b></p><p><b> 1 前言1</b></p><p> 1.1 研究背景1</p><p> 1.2 國內(nèi)外研究狀況1</p><p>
15、 1.3 研究內(nèi)容2</p><p> 1.4 課題意義2</p><p> 2 需求分析及相關技術介紹3</p><p> 2.1 軟件設計總體目標3</p><p> 2.2 系統(tǒng)基本功能3</p><p> 2.3 西洋跳棋游戲規(guī)則說明4</p><p> 2.4
16、 相關技術介紹4</p><p> 2.4.1 Qt軟件簡介4</p><p> 2.4.2 C++編程語言介紹5</p><p> 2.5 系統(tǒng)技術需求5</p><p> 3 系統(tǒng)分析及設計6</p><p> 3.1 系統(tǒng)總體設計6</p><p> 3.1.1 模
17、塊化設計流程6</p><p> 3.1.2 系統(tǒng)總體構成流程6</p><p> 3.2 系統(tǒng)算法設計概述7</p><p> 3.3 系統(tǒng)特點及功能結構7</p><p> 3.3.1 系統(tǒng)特點7</p><p> 3.3.2 功能結構7</p><p><b&g
18、t; 4 詳細設計9</b></p><p> 4.1 游戲界面模塊詳細設計9</p><p> 4.2 棋盤設計模塊詳細設計10</p><p> 4.3 人機博弈模塊設計詳細設計12</p><p> 4.3.1 博弈樹算法設計12</p><p> 4.3.2 局面評估設計12
19、</p><p> 4.3.3 走法生成12</p><p> 4.4 游戲規(guī)則模塊詳細設計14</p><p> 4.5 勝負判斷模塊詳細設計15</p><p> 5 運行及調(diào)試17</p><p> 5.1 開始界面調(diào)試情況17</p><p> 5.2 棋盤初始化調(diào)
20、試情況17</p><p> 5.3 走棋調(diào)試18</p><p> 5.4 勝負判斷調(diào)試19</p><p><b> 6 總結21</b></p><p><b> 參考文獻22</b></p><p><b> 致 謝23</b&
21、gt;</p><p><b> 前言</b></p><p><b> 研究背景</b></p><p> 西洋跳棋的起源無法追溯,根據(jù)大多數(shù)棋藝史家的考證,現(xiàn)在認為西洋跳棋起源于法國的南部地區(qū)。當今,例如國際象棋等游戲規(guī)則在西方已經(jīng)統(tǒng)一標準,擁有一套統(tǒng)一化的走棋規(guī)則,但西洋跳棋至根據(jù)地域不同今卻流傳著幾十種不同的
22、游戲規(guī)則,例如波蘭跳棋、英國跳棋、中東跳棋等。西洋跳棋下棋過程特別注重玩家對整體棋局的掌控性。</p><p> 西洋跳棋玩法種類繁多,本次設計采用最通用的西洋跳棋規(guī)則。雙方輪流走子,玩家執(zhí)紅旗先行,人機輪流落子。規(guī)則規(guī)定:未成王的棋子只能沿斜線向?qū)Ψ阶笊匣蛘哂疑锨靶幸桓?該格空出沒有落子),且未成王的棋子只能前行不可后退。吃子時,對方的棋子在己方棋子斜對角格子的左上或者右上,且對方棋子左上或者右上格子沒有其他
23、棋子。加冕成王,游戲在雙方底界設計了加冕線,當己方棋子到達對方底邊界時,加冕成王,王棋與未成網(wǎng)的棋子區(qū)別在于王棋可以后退。勝負判斷為兩種情況,當一方棋子數(shù)量為零時,判斷為對方游戲勝利;當雙方棋子都無法移動后,由局面評估給出勝利一方。</p><p><b> 國內(nèi)外研究狀況</b></p><p> 當今,西洋跳棋在流行5000年的歷史之后已經(jīng)被計算機完全攻破。多
24、年來,西洋跳棋一直被眾多數(shù)學家、電腦學家和英國跳棋專家研究,取得了非常顯著的成功。早在1989年,喬納森·謝弗(Jonathan Schaeffer)開始了西洋跳棋項目的研究,在1994年,謝弗的計算機程序已經(jīng)可以擊敗當時人類最頂尖的西洋跳棋大師。在之后的研究中,喬納森·謝弗聯(lián)手艾伯特大學的學者共同研究出西洋跳棋程序“奇努克”,被譽為當今世界無法被戰(zhàn)勝的跳棋程序。</p><p> 自195
25、0年,香儂首次提出國際象棋解決方案揭開機器博弈發(fā)展序幕之后,諸多計算機愛好者和科學家在此領域不斷研究,在九十年代初期,計算機連續(xù)戰(zhàn)勝很多棋道大師,特別是1997年“深藍”戰(zhàn)勝世界棋王,人工智能在計算機博弈方面取得輝煌的成就。之后的研究中,相繼攻克中國象棋等眾多棋類。2016年3月谷歌Alpha Go與韓國與韓國棋手李世石進行的圍棋比賽中計算機以4:1戰(zhàn)勝對手獲得勝利,人工智能在下棋程序又一次重大進步。</p><p&
26、gt;<b> 研究內(nèi)容</b></p><p> 西洋跳棋是一款規(guī)則簡單,易于上手的游戲,由于游戲的特性,可以提高玩家對全局的把握能力,并且可以提高玩家邏輯思維能力。本次設計研究內(nèi)容主要包括以下介個方面:</p><p> 游戲界面設計:游戲界面的設計風格直接影響到玩家對游戲的興趣,所以游戲界面設計在游戲設計中起到非常重要的作用,游戲界面設計主要為游戲開始界面
27、。</p><p> 游戲棋盤設計:本游戲棋盤設計為標準西洋跳棋10*10的棋盤設計,棋盤中100個格子黑白分明落子明確,玩家可以很容易掌握棋盤。</p><p> 落子設計:落子設計分為玩家落子和電腦落子。玩家落子只需遵從游戲規(guī)則即可,電腦落子采用博弈樹搜索算法,尋找最優(yōu)落子方案。</p><p> 局面評估設計:局面評估采用分類加權計算雙方優(yōu)勢,最終判斷局
28、面勝負情況。</p><p><b> 課題意義</b></p><p> 目前,市面上棋牌類游戲種類繁多,例如中國象棋、跳棋等棋類游戲版本眾多,但西洋跳棋游戲卻在棋牌類游戲中特別少見,特別是網(wǎng)絡上玩家可選擇的西洋跳棋游戲制作簡單,畫面粗糙,加上許多讓玩家不喜的廣告,很難滿足西洋跳棋愛好者的興趣。因此需要一款設計畫面精美,走棋風格合理的西洋跳棋程序來滿足西洋跳棋愛
29、好者的興趣。</p><p> 本設計在過程中注重界面設計,Qt軟件獨特的界面設計功能在設計中可以為玩家設計出精美的界面,精美的開始界面有利于提高玩家的游戲樂趣。在游戲設計中,略高的電腦走法,使玩家不會感到枯燥,玩家在下棋過程中提高自身棋藝的同時,不僅可以起到放松的作用,還可以鍛煉玩家的邏輯思維能力和智力。</p><p> 需求分析及相關技術介紹</p><p&g
30、t;<b> 軟件設計總體目標</b></p><p> 西洋跳棋是一款益智類人機對弈棋類游戲。本款軟件主要針對的用戶為西洋跳棋愛好者和初學者玩家,玩家在使用軟件過程中達到休閑娛樂,提高棋藝的目的。設計目標:</p><p> 第一,界面設計獨特新穎,輕松自然,可以吸引玩家,使玩家達到放松的目的;</p><p> 第二,游戲難度適中,
31、電腦走棋算法合理,適合初級玩家使用,使玩家在使用過程中可以達到提高棋藝的目的,但游戲難度不會過大,不可以讓玩家使用過程中因游戲難度過高感到枯燥。</p><p><b> 系統(tǒng)基本功能</b></p><p> 本軟件使用對象為游戲玩家,以界面新穎,風格獨特,走棋合理的特點為主,軟件應包括游戲開始界面,棋盤,棋子,人機博弈,局面評估,勝負判斷等內(nèi)容,設計分為五個模
32、塊:</p><p> 開設界面模塊:用戶進入游戲,首先是歡迎界面,既游戲開始界面,玩家點擊開始游戲按鈕,進入游戲。</p><p> 棋盤設計:玩家進入游戲后,生成初始棋盤,棋盤為10*10共一百個格子,棋盤設計格子為黑白兩色分別交錯排布,便與玩家區(qū)分,棋子設計要求與棋盤形成對比色彩,便于玩家操作。</p><p> 人機對弈模塊:本模塊為程序設計的核心模塊
33、,玩家落子后,電腦根據(jù)搜索算法找到最優(yōu)落子方法,可與玩家進行對弈。</p><p> 下棋規(guī)則模塊:本模塊為西陽跳棋程序的基礎模塊,判斷落子地方和吃子情況。</p><p> 勝負判斷模塊:本模塊的目的是判斷游戲勝負。</p><p> 以上為游戲軟件主要功能設計,系統(tǒng)功能模塊如圖2.1所示</p><p><b> 軟件功
34、能模塊圖</b></p><p> 西洋跳棋游戲規(guī)則說明</p><p><b> 游戲雙方輪流走棋。</b></p><p> 棋子為成為王棋前,棋子只能向左上角或者右上角且無人占據(jù)的格子斜走一格。吃子時,敵方的棋子必須在己方棋子的左上角或者右上角的格子,而且該敵方棋子對應的左上角或者右上角必須沒有棋子。</p>
35、<p> 當棋子到了對方底線,該棋子就可以加冕成王棋,王棋可以向后移動。</p><p> 若一個棋子可以吃棋,則必須吃子。</p><p> 若一方無法行走或者所有棋子均被吃,則該方算輸。</p><p><b> 相關技術介紹</b></p><p> 本軟件利用Qt5.2.0軟件編寫,編程語
36、言為C++計算機編程語言編寫。</p><p><b> Qt軟件簡介</b></p><p> Qt是一個跨平臺的C++應用程序和圖形界面開發(fā)框架。于1991年由奇趣科技研發(fā),2007年之后,Qt跨平臺開發(fā)戰(zhàn)略得以迅速發(fā)展,現(xiàn)在廣泛用于圖形用戶界面程序開發(fā)。</p><p><b> Qt的特點:</b></
37、p><p> 優(yōu)良的跨平臺特性:Qt支持多平臺運行,在不同平臺下無需修改源代碼便可以生成特有的圖形界面風格。</p><p> 面向?qū)ο螅河捎赒t擁有非常良好的封裝機制,所以,Qt的模塊化程度較高,不同元件之間協(xié)同工作簡方便。</p><p> 豐富的應用程序接口(API):Qt擁有非常多的C++類。</p><p> 除此之外,Qt還擁
38、有大量的開發(fā)文檔,支持XML技術。</p><p> 自Qt4.6之后Qt中引進Qt Quick,開發(fā)人員與設計人員可以協(xié)同創(chuàng)建動畫模式界面和應用程序。</p><p> Qt擁有簡單漂亮的界面,同時簡單易學并且資料豐富,實用性很強。</p><p><b> C++編程語言介紹</b></p><p> C++
39、編程語言是一種面向?qū)ο蟮某绦蛟O計語言,是由C語言發(fā)展而來。C++繼承了C語言大部分特點,并在C語言的基礎上進行了完善,添加了類,C++能夠與C語言相互兼容。</p><p> C++編程語言的優(yōu)勢:</p><p> 在高級語言中處理運行速度最快的面向?qū)ο蟪绦蛟O計語言,目前市面上大多數(shù)游戲軟件都是又C++來實現(xiàn)的。</p><p> 語言靈活,功能強大,特別是
40、類層次結構的設計。</p><p> C++標準定義細致,具有嚴謹、精確的特性,語法思路參差分明,語法結構明確。 </p><p><b> 系統(tǒng)技術需求</b></p><p> 本程序采用Qt開發(fā)環(huán)境,編程語言使用C++編程語言的西洋跳棋游戲。</p><p> 開發(fā)環(huán)境:Qt Creator5.2
41、.0</p><p> 運行環(huán)境:Windows7 x64 </p><p><b> 系統(tǒng)分析及設計</b></p><p> 本章內(nèi)容是在第二章的需求分析的基礎上形成的程序設計藍圖,作為后續(xù)編碼設計的依據(jù)。本章主要介紹了西洋跳棋程序開發(fā)的總體設計。</p><p><b> 系統(tǒng)總體設計</b
42、></p><p><b> 模塊化設計流程</b></p><p> 根據(jù)需求分析,游戲設計需要六大模塊,每個模塊功能實現(xiàn)如下:</p><p> 開設界面模塊:設計開始界面。</p><p> 繪制棋盤與棋子設計設計模塊:繪制棋盤,設計棋子。</p><p> 人機對弈模塊:設
43、計算法,實現(xiàn)人機對弈。</p><p> 下棋規(guī)則模塊:根據(jù)規(guī)則判斷落子地方和吃子情況。</p><p> 勝負判斷模塊:設計算法判斷游戲勝負。</p><p><b> 系統(tǒng)總體構成流程</b></p><p> 西洋跳棋博弈軟件構成如圖3.1所示</p><p> 西洋跳棋博弈軟件構
44、成圖</p><p> 乙方為玩家,甲方為電腦。乙方遵循游戲規(guī)則落子,甲方通過對當前局面進行局面評估,然后進行博弈樹搜索算法進行搜索,形成當前最優(yōu)落子,生成走法并落子,甲、乙雙方落子后,當前局面在棋盤顯示,電腦循環(huán)對棋盤當前局面掃描,經(jīng)當前局面反饋給甲方機器博弈系統(tǒng),甲方重新進行局面評估,生成走法。</p><p><b> 系統(tǒng)算法設計概述</b></p&
45、gt;<p> 西洋跳棋人機對弈模塊為系統(tǒng)的核心模塊,算法采用極大極小值算法,算法的本質(zhì)思想是:一方總是尋找對己方最有利的的走法,而另一方總是尋找對對方最不利的走法,其搜索樹如圖3.2所示</p><p> 圖3.2 極大—極小搜索算法樹</p><p> 根據(jù)算法樹可知Min節(jié)點總是從其下一層Max中挑選估值最小的節(jié)點進行估值,Max節(jié)點剛好相反。在走棋過程中,遍歷整
46、顆搜索樹,尋找對己方最有利的走法走子。</p><p><b> 系統(tǒng)特點及功能結構</b></p><p><b> 系統(tǒng)特點</b></p><p> 具有和諧的界面。界面設計美觀,簡潔。</p><p> 具有易操作性。本系統(tǒng)避免過多按鈕在游戲中給玩家?guī)淼牟槐?,設計簡單,已于操作。&
47、lt;/p><p> 適用于廣大西洋跳棋愛好者,面向性廣闊。</p><p> 本系統(tǒng)是本地游戲,安全可靠</p><p><b> 功能結構</b></p><p> 通過上文需求分析和總體設計,本系統(tǒng)以5個模塊為目標設計。其中,下棋規(guī)則模塊為基礎,為玩家和電腦落子提供基礎規(guī)則,人機對弈模塊為系統(tǒng)核心,本次設計采用
48、極大極小人機博弈搜索算法設計了合理的電腦落子算法,繪制棋盤模塊和勝負判斷模塊為本次設計的前提,為游戲的可行性提供保障,最后是游戲界面設計,為整體游戲進行美化。其具體模塊及主要功能結構圖如圖3.2所示</p><p> 西洋跳棋整體設計及主要功能結構圖</p><p><b> 詳細設計</b></p><p> 游戲界面模塊詳細設計<
49、;/p><p> 為了使游戲界面美觀大方,從網(wǎng)絡上選取圖片,并用美圖秀秀軟件對所選圖片進行美圖修改,利用Qt庫自帶的paintEvent(QPaintEvent *e)函數(shù)設計了游戲開始界面,開始界面采用綠色圖片作為背景圖片,一方面可以緩解玩家視覺疲勞,另一方面,背景顏色與開始游戲按鈕色彩區(qū)分明確,使整體設計達到簡單、美觀的效果。游戲界面模塊流程圖如圖4.1所示</p><p>&
50、lt;b> 游戲界面模塊流程圖</b></p><p> 程序運行首先進入游戲開始界面,點擊開始游戲按鈕,將進入游戲。界面設計尺寸長為10cm,寬為8cm,并在界面中添加“開始游戲”按鈕,該按鈕有Qt編程工具中的界面布局工具完成,關鍵代碼如圖4.2所示</p><p> 界面設計模塊開始游戲按鈕添加關鍵程序</p><p> 通過界面背景設
51、計和按鈕添加,開始界面模塊設計完成,開始界面模塊設計效果圖如圖4.3所示</p><p><b> 界面設計效果圖</b></p><p> 棋盤設計模塊詳細設計</p><p> 該模塊的主要功能是繪制棋盤和設計棋子,棋盤與棋子分為兩種狀態(tài),一種是初始化狀態(tài),當點擊開始游戲按鈕后,進入游戲,此時,棋盤顯示為初始化狀態(tài)。初始化狀態(tài)時,甲、
52、乙雙方各持有15枚棋子處于雙方邊界。另一種狀態(tài)是走子或者吃子時,棋盤中棋子位置發(fā)生改變,甲、乙雙方輪流走子,每次走子之后都將跟新一遍棋盤。棋盤繪制與棋子設計模塊流程圖如圖4.4所示</p><p> 棋盤繪制與棋子設計模塊</p><p> 棋盤設計包括棋盤繪制和棋子設計在高性能的博弈設計中,比特棋盤應用較為廣泛,西洋跳棋智能程序設計也采用比特棋盤設計而成。棋盤設計了10*10共100
53、個格子,其中50個格子用來落子,棋盤設計用4個64位無符號整型設計而成,如表4.2所示</p><p> 棋子位置與對應比特關系表</p><p> 由<黑棋,黑王棋,白棋,白王棋>四元素組生成棋盤,棋盤初始狀態(tài)為<0X0003FFFFC00000,0,0X000000000FFFFF,0>,棋盤設計效果圖如圖4.2所示</p><p>
54、;<b> 棋盤設計效果圖</b></p><p> 人機博弈模塊設計詳細設計</p><p><b> 博弈樹算法設計</b></p><p> 人機博弈模塊為本次設計核心模塊,而博弈樹算法為本次設計核心算法。該模塊設計主要目的是完成人機對弈過程。該過程設計核心算法為極大-極小搜索算法,算法的核心思想是,一方總是
55、尋找對己方最有利的走法,另一方總是尋找對對方最不利的走法。在本次設計中,設計玩家為藍色方,電腦為紅色方,紅色方為極大方,博弈樹搜算算法設計的核心是紅方通過搜索算法和局面評估函數(shù)找到對自己最有利的走法。計算機走棋由函數(shù)computer_go()設計完成。</p><p><b> 局面評估設計</b></p><p> 西洋跳棋是零和游戲,局面評估影響因素眾多,本次
56、設計主要對以下幾個方面進行評估,分別為棋子和王棋的數(shù)量,處于安全位置的棋子和王棋的數(shù)量(安全位置是指處于底邊或者邊界無法被對方吃子的位置),可以移動的棋子和王棋數(shù)量,還有防御棋子數(shù)量和進攻棋子數(shù)量。估值函數(shù)設計思路為:</p><p> 估值方法=電腦棋子數(shù)-選手棋子數(shù)-0.5*威脅棋子數(shù)(可能會被吃掉的棋子)</p><p> 估值函數(shù)最重要的任務是找到威脅棋子,在程序中由CalVa
57、lue()函數(shù)設計完成。在設計中,函數(shù)InThreat()判斷該棋子是否有可能被對方棋子吃掉,判斷標準是對該棋子左上、右上、左下、右下分別判斷。函數(shù)InBoard()則判斷棋子當前位置是否處于邊界。</p><p><b> 走法生成</b></p><p><b> 普通棋子走法生成</b></p><p> 普通
58、棋子走棋規(guī)則為棋子可沿對角線對方方向棋子周邊移動一個,移動方向的格子為空。遇到吃子時,被吃的棋子周圍有空格才可以吃子,其設計流程如下,普通棋子走棋流程圖如圖4.6所示</p><p> 若棋子列表不為空,則從棋子列表中取出一個棋子;</p><p> 對該棋子相鄰四個方向進行判斷,若存在對方棋子且對方棋子后方格子為空,則將該走法加入走法棧中,否則到第③步;</p><
59、;p> 若走法棧不為空,則從走法棧中取出一個走法;</p><p> 如果從棋子位置可以繼續(xù)吃子,則按照第②步繼續(xù)走子;</p><p> 否則若當前吃子數(shù)量大于最大吃子數(shù)量,則清空吃子走法列表;</p><p> 若當前吃子數(shù)量等于最大吃子數(shù)量,則將該走法加入走法列表;</p><p><b> 否則到第③步;&l
60、t;/b></p><p> 若該走法最后一步落在加冕線上,則棋子加冕成王,否則到第①步;</p><p><b> 否則吃子走法終結</b></p><p> 普通棋子走法生成流程圖</p><p><b> 王棋走法生成</b></p><p> 王棋是由
61、普通棋子到達加冕線轉換而來,因此王棋走法與普通棋子走法有部分相同,王棋走發(fā)生成流程圖如圖4.7所示,王棋走法流程如下,</p><p> 若棋子列表不為空,則從棋子列表中取出一個棋子;</p><p> 對該棋子相鄰四個方向進行判斷,若從在對方棋子且對方棋子為空,則將該走法加入走法棧中,</p><p> 將后面所有空格子走法加入走法棧中,否則到第④步;<
62、;/p><p> 若走法棧不為空,則從走法棧中取出一個走法;</p><p> 如果從棋子位置可以繼續(xù)吃子,則按照第②步繼續(xù)走子;</p><p> 否則若當前吃子數(shù)量大于最大吃子數(shù)量,則清空吃子走法列表;</p><p> 否則若當前吃子數(shù)量等于最大吃子數(shù)量,則將該走法加入走法列表;</p><p><b&
63、gt; 否則到第④步;</b></p><p><b> 否則到第①步;</b></p><p><b> 否則吃子走法終結</b></p><p><b> 王棋走法生成流程圖</b></p><p> 游戲規(guī)則模塊詳細設計</p><
64、;p> 本模塊主要功能是實現(xiàn)游戲按照規(guī)則落子,西洋跳棋游戲規(guī)則為,游戲雙方輪流走棋。棋子為成為王棋前,棋子只能向左上角或者右上角且無人占據(jù)的格子斜走一格。吃子時,敵方的棋子必須在己方棋子的左上角或者右上角的格子,而且該敵方棋子對應的左上角或者右上角必須沒有棋子。當棋子到了對方底線,該棋子就可以加冕成王棋,王棋可以向后移動。若一個棋子可以吃棋,則必須吃子。若一方無法行走或者所有棋子均被吃,則該方算輸。游戲規(guī)則在程序中有函數(shù)CanM
65、ove()設計完成,普通走子規(guī)則由函數(shù)Computer_Can_Move()生成,普通棋子吃子規(guī)則由函數(shù)Computer_Can_Eat()設計完成。代碼if(_piece->GetStatus()!=piece::king) return false;完成了普通棋子不能后退,王棋可以后退的游戲規(guī)則。</p><p> 游戲規(guī)則模塊流程圖如圖4.8所示</p><p><b&
66、gt; 游戲規(guī)則模塊流程</b></p><p> 勝負判斷模塊詳細設計</p><p> 本模塊設計主要是在游戲結束后判斷玩家和電腦的勝負情況。勝負判斷有兩種情況,一種是一方無法走棋,則該方判定為輸,另一種是一方在棋盤中棋子數(shù)目為零。勝負判斷流程圖如下圖4.8所示</p><p><b> 勝負判斷模塊流程圖</b><
67、;/p><p> 雙方輪流落子之后,每次落子都會更新棋盤,根據(jù)流程圖設計,首先由系統(tǒng)判定游戲是否結束,在程序設計中,游戲是否結束設計函數(shù)GameOver()判定,判定標準為一方棋子數(shù)目為零或者無法走子,判定游戲結束之后,判定玩家和電腦的贏家。</p><p> 程序中函數(shù)IsHostWin()判定電腦是否取得勝利,玩家勝負判定由函IsAwayWin()設計,評定流程與計算機是否勝利流程相同
68、,判定條件為客隊棋子是否可以移動,計算機判定勝利過程流程圖如圖4.9所示</p><p> 計算機勝負判定流程圖</p><p><b> 運行及調(diào)試</b></p><p><b> 開始界面調(diào)試情況</b></p><p> 程序運行,進入游戲開始界面,如圖5.1所示</p>
69、<p><b> 游戲開始界面</b></p><p> 運行情況說明:程序運行,進入游戲開始界面,界面畫質(zhì)清楚,點擊開始游戲按鈕,進入游戲良好。</p><p><b> 棋盤初始化調(diào)試情況</b></p><p> 游戲開始,進入游戲,此時棋盤為初始化狀態(tài),如圖5.2所示</p>&
70、lt;p><b> 棋盤初始化界面</b></p><p> 運行情況說明:棋盤初始化狀態(tài)良好,按照詳細設計,棋盤為10*10共100個棋格,棋盤底色為黑白兩色,雙方各15個棋子排布在雙方底界。棋子與棋盤顏色分明。</p><p><b> 走棋調(diào)試</b></p><p> 玩家執(zhí)藍旗現(xiàn)行,電腦后手,走子按
71、照規(guī)則沿斜對角線方向現(xiàn)行,每次移動一個棋子,可吃子,運行結果如圖5.3,5.4所示</p><p><b> 普通棋子走棋圖</b></p><p><b> 王棋走子運行圖</b></p><p> 運行情況說明:普通棋子走棋良好,遇到可吃棋子自動吃子,普通棋子到對方底線變成王棋,王棋走子狀況良好,測試表如表5.1
72、所示</p><p><b> 表5.1走棋測試表</b></p><p><b> 勝負判斷調(diào)試</b></p><p> 當一方棋子為零或一方無棋可走時,系統(tǒng)判斷勝負并作出評斷。</p><p> 一方棋子數(shù)目為零時系統(tǒng)做出評判如圖所5.5所示</p><p>
73、 一方棋子數(shù)目為零系統(tǒng)做出勝負評判</p><p> 當一方無法走棋時,電腦做出勝負判斷如圖5.6所示</p><p> 一方無法走棋時系統(tǒng)做出勝負評判圖</p><p> 運行結果說明:當一方棋子為零或者無棋可走時,系統(tǒng)做出勝負評判并作出提示,運行狀況穩(wěn)定。</p><p><b> 總結</b></p&
74、gt;<p> 本章主要內(nèi)容是對西洋跳棋智能程序設計的總結。本次設計應用C++編程語言,在Qt開發(fā)平臺設計編寫,完成了游戲開始界面設計、棋盤繪制、棋子走法生成、勝負判斷等項目,設計完成的西洋跳棋智能程序界面精美,走棋合理,操作簡單,符合本次設計要求。</p><p><b> 項目優(yōu)勢:</b></p><p> 優(yōu)良的游戲界面。與網(wǎng)絡上流傳的西洋
75、跳棋程序比較,本次設計擁有精美的界面設計,開始界面簡單易用,避免了玩家錯誤點擊導致無法運行的難題,同時棋盤棋子設計風格獨特黑白底色的棋盤設計,玩家可以清楚的思考下一步走棋,紅色與藍色棋子色彩分明,玩家在走棋過程中能夠清楚看清自己的棋子位置,便于掌控全局。棋盤與棋子形成強烈的色彩感,可吸引玩家。</p><p> 合理的走棋算法。本次設計采用經(jīng)典的極大—極小搜算算法設計,在設計過程中,難度適中。設計中,較高的電腦
76、棋藝水平可以提高玩家的棋藝水平,游戲設置水平適中,玩家在娛樂中不會感到枯燥。</p><p><b> 項目不足:</b></p><p> 游戲設計中,注重走棋的設計,對娛樂性設計不足,缺少一些音樂文等娛樂項目。</p><p> 無法人人對戰(zhàn),按照設計要求,本次設計是人機對弈,在設計過程中,沒有設計人人對弈模式,整體游戲有所欠缺。&l
77、t;/p><p> 本次畢業(yè)設計過程中,出現(xiàn)了很多問題,是對平時學習能力欠缺最直觀的反映,在設計中,通過多方面的學習,完善了之前學習的不足,同時,設計中要求的Qt軟件在此之前沒有使用過,通過本次設計,學會了使用新的工具。在設計中,不僅學到了許多技術,同時不斷克服自身不夠嚴謹?shù)膽B(tài)度,收益良多。</p><p><b> 參考文獻</b></p><p
78、> 譚浩強.Java語言程序設計(第三版)[M].北京:清華大學出版社,2008</p><p> 焦尚斌,劉丁.博弈樹置換表啟發(fā)式算法研究[J].計算機工程應用,2010(06)</p><p> 王嬌,徐興和.計算機博弈:人工智能的前沿領域—全國大學生計算機博弈大賽[J].計算機教育.2012(07)</p><p> 張利群.五道棋計算機博弈程序
79、設計[J].計算機工程.2010(10)</p><p> 李天明.并行計算機博弈系統(tǒng)設計與改進[J].電子制作.2014(21)</p><p> 張穎,李祖樞.棋類計算機博弈系統(tǒng)的主要研究方法及在6子棋上的應用[J].重慶工學院學報(自然科學版).2008(09)</p><p> Mustapha Lakrib, Tewfik Sari. Ti
80、me averaging for ordinary differential equations and retarded functional differential equations[J]. Electronic Journal of Differential Equations, 2010, 2010(40,).</p><p> Merrick J. DeWitt, Bradley S.
81、Prall, Robert J. Levis. Orientational averaging in the intense field tunnel ionization of molecules[J]. The Journal of Chemical Physics, 2000, 113(4).</p><p> 李海峰.基于J2EE技術開發(fā)高性能BBS論壇[D].上海:華東師范大學,2
82、006</p><p> 汪輝松,汪雋,杜群,曾貴華.Self-dual Codes Defined on Factor Graphs[J].Journal of Shanghai Jiaotong University.2007(04)</p><p> 趙志宏,李蓓蓓,耿兆豐,徐敏. Imitation of Fabric Flagging Based on Amplit
83、ude Modulation[J]. Journal of Donghua University(English Edition). 2007(06)</p><p> 劉雅靖.計算機博弈之六子棋的主要技術分析[J].電腦知識與術.2011(10)</p><p> 湯云雄,董從民.計算機博弈系統(tǒng)在中國象棋教學中的應用[J].科技信息.2011(19)</p&
84、gt;<p> 張麗娜.機器人功能與價格曲線的博弈[N].消費日報.2016-05-05 (A02)</p><p> 馬艷紅.手術機器人操作規(guī)范化管理“告急”[N].中國醫(yī)藥報.2016-03-29 (003)</p><p> 梁瑩.廣西首臺“達芬奇”手術機器人上崗[N].廣西日報.2016-04-13 (004)</p><p><b
85、> 致 謝</b></p><p> 在本次畢業(yè)設計,首先感謝我的知道老師XXX老師。XXX老師具有嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,我在她的身上學到了許多除知識之外的東西,對我今后影響意義深遠。XXX老師在我的本次畢業(yè)設計中提供了很大幫助,從選題開始,到畢設中存在問題的解決,XXX老師事無巨細,親力親為的給予我詳細解答,是我受益良多。由于本人之前態(tài)度懶散,不夠認真,XX
86、X老師不厭其煩的提醒我,再跟胡老師的交流中,老師的諄諄教導及老師嚴謹?shù)目蒲袘B(tài)度,時刻影響著我,是我克服了許多自身的不足,收獲很大。XXX老師知識淵博,畢設中出現(xiàn)了許多問題,老師給我的解決意見在設計中起到了非常重要的作用。在此,向XXX老師表示衷心的感謝。</p><p> 其次,要感謝在本次畢業(yè)設計中幫助過我的同學。身邊的同學在自己時間很緊的情況下,依舊熱心的幫助我,特別是剛開始軟件的安裝過程中,新軟件的安裝出
87、新了問題,在與同學的探討和同學的幫助下,最終解決了問題。同時,由于本次設計的算法難度很大,同學在我算法的選擇上給了我很重要的意見,最后選擇的算法非常合理,使得畢業(yè)設計順利進行。在此,感謝所有幫助過我的同學。</p><p> 最后,感謝學校,學院給予我的這次畢業(yè)計機會,在本次畢業(yè)設計中,我學到了很多東西,畢業(yè)設計過程中,我深刻感覺到自己平時的不足之處,這次畢業(yè)設計,我不僅對之前的知識有了進一步的生化,同時改正了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c程序設計畢業(yè)論文
- java程序設計畢業(yè)論文
- 電子時鐘程序設計畢業(yè)論文
- c++程序設計課程教學畢業(yè)論文
- 高校教材征訂系統(tǒng)程序設計-畢業(yè)論文
- 測繪工程測量平差程序設計畢業(yè)論文
- 基于vc手寫數(shù)字識別程序設計_畢業(yè)論文設計
- 基于vc手寫數(shù)字識別程序設計_畢業(yè)論文設計
- 畢業(yè)論文---自動識別譜峰的程序設計
- 導線平差的程序設計與實現(xiàn)-畢業(yè)論文
- 導線平差的程序設計與實現(xiàn)_畢業(yè)論文設計
- 畢業(yè)論文--電鑄過程plc控制程序設計
- 畢業(yè)論文--電鑄過程plc控制程序設計
- 畢業(yè)論文--飛輪的數(shù)控加工工藝及程序設計
- 自適應數(shù)值積分算法及其程序設計【畢業(yè)論文】
- 導線平差的程序設計與實現(xiàn)畢業(yè)論文
- 數(shù)學專業(yè)畢業(yè)論文--優(yōu)化方法與程序設計研究
- 畢業(yè)論文---網(wǎng)絡遠程通信與控制程序設計
- c++程序設計課程教學探索與實踐畢業(yè)論文
- 畢業(yè)論文---網(wǎng)絡遠程通信與控制程序設計
評論
0/150
提交評論