

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 2014年4月30日</p><p> 論文題目:五子棋游戲軟件的設計與實現(xiàn)</p><p><b> 摘要</b></p><p> C++語言是一種面向?qū)ο蟮恼Z言,盡管在當前,可視化語言發(fā)展迅速,普及很快,但C++語言作為一種基礎的語言,它的有時依然存在,甚至有時它是不可替代的,特別是和硬件接口技術相聯(lián)系的軟件。&
2、lt;/p><p> 五子棋游戲是一種簡單大眾的游戲,自從計算機實現(xiàn)以來,深受廣大電腦玩家的喜愛,現(xiàn)在流行的五子棋游戲軟件大多缺乏美觀的界面,和容易的操作方法,電腦的AI值也不是很高。本文通過C++語言在計算機圖形方面的編程,設計了五子棋游戲軟件,使該軟件具有美觀友好的截面,在人機對弈時,使電腦具有較高的智商。本游戲是以C++語言作為開發(fā)工具,采用搜索算法設計最優(yōu)落子點開發(fā)的游戲軟件。本文詳細地介紹了五子棋游戲軟件
3、設計的全過程,描述了該軟件的詳細功能。</p><p> 關鍵詞:C++語言; 面向?qū)ο笳Z言; 算法</p><p><b> Abstract</b></p><p> The C++ language is an Object-oriented language, although in the current visualiza
4、tion language rapidly, and spread quickly, but the C++ language as a basis for language, its advantages still exist, and sometimes it is irreplaceable, particularly hardware and software interfaces are linked. </p>
5、<p> Gobang game is a simple and popular game, since the computer to achieve, by the love of computer players, but now most popular game soft gobang lack aesthetic interface, and easy method of operation, the val
6、ue of the computer AI is not high. The adoption of the C++ programming language in computer graphics, designed gobang game software to enable the software with a beautiful and friendly interface in both game, the compute
7、r has a higher IQ. The game is based on C++ language, using searching alg</p><p> Key word:C++ language; Object-oriented language; algorithm</p><p><b> 目錄</b></p><p>&
8、lt;b> 摘要I</b></p><p> AbstractII</p><p><b> 1引言1</b></p><p> 1.1五子棋的介紹1</p><p> 1.2系統(tǒng)設計思想2</p><p> 1.3開發(fā)工具簡介3</p>
9、;<p> 1.4關于MFC簡介3</p><p> 1.5論文結(jié)構4</p><p><b> 2需求分析5</b></p><p> 2.1需求分析的編寫目的5</p><p> 2.2可行性研究5</p><p> 2.2.1技術可行性5&l
10、t;/p><p> 2.2.2法律可行性5</p><p> 2.2.3經(jīng)濟可行性5</p><p> 2.2.4可行性結(jié)論5</p><p> 2.3五子棋游戲規(guī)則5</p><p> 2.3.1無禁手規(guī)則5</p><p> 2.3.2禁手規(guī)則6</p&
11、gt;<p> 2.3.3禁手的解釋6</p><p> 2.4任務概述7</p><p> 2.4.1目標7</p><p> 2.4.2處理對象7</p><p> 2.4.3安全性和完整性7</p><p> 2.5功能模塊分類7</p><p
12、><b> 3總體設計9</b></p><p> 3.1系統(tǒng)環(huán)境要求9</p><p> 3.2總體設計過程9</p><p> 3.3系統(tǒng)的算法設計9</p><p> 3.3.1博弈樹9</p><p> 3.3.2極大極小值算法(Minimax Al
13、gorithm)10</p><p> 3.3.3負極大值算法(Negamax Algorithm)11</p><p> 3.3.4Alpha-Beta搜索11</p><p> 3.3.5置換表(Transposition Table)12</p><p> 3.3.6哈希表(Hash Table)13<
14、/p><p> 3.3.7歷史啟發(fā)(History Heuristic)14</p><p><b> 4詳細設計16</b></p><p> 4.1系統(tǒng)程序流程圖16</p><p> 4.2系統(tǒng)運行平臺設置17</p><p> 4.3系統(tǒng)主要功能的實現(xiàn)17<
15、/p><p> 4.3.1程序系統(tǒng)結(jié)構17</p><p> 4.3.2初始化棋盤17</p><p> 4.3.3下棋操作18</p><p> 4.3.4判斷輸贏20</p><p> 4.3.5AI算法21</p><p> 5系統(tǒng)的實驗與測試24</
16、p><p> 5.1系統(tǒng)主要功能的實現(xiàn)24</p><p> 5.1.1初始化棋盤24</p><p> 5.1.2人機對戰(zhàn)24</p><p> 5.1.3人人對戰(zhàn)25</p><p> 5.1.4認輸功能25</p><p> 5.1.5游戲規(guī)則26</
17、p><p><b> 5.2測試26</b></p><p> 5.2.1測試的任務26</p><p> 5.2.2測試的目標26</p><p> 5.2.3軟件測試的方法26</p><p><b> 6結(jié)論28</b></p>
18、<p><b> 致謝29</b></p><p><b> 參考文獻30</b></p><p><b> 引言</b></p><p> 計算機技術的發(fā)展,使得計算機在現(xiàn)代企業(yè)、家庭中得以普及,應用計算機成為現(xiàn)代人生活中非常重要的一部分。大到政府辦公、教育事業(yè)、商業(yè)活動,小到
19、生活中的每一個細節(jié)。隨著社會進步的節(jié)奏越來越快,人們的生活壓力也越來越大。每天奔波于不同的目的地,忙得沒有時間和朋友見面,忙得想找個釋放壓力的機會都沒有。這個時候,你是不是非常希望有個游戲,能夠陪你輕松愉快度過周末。自從計算機作為游戲?qū)?zhàn)平臺以來,各種棋類游戲如雨后春筍般紛紛冒出。使得那些喜愛下棋,又常常苦于沒有對手的棋迷們能隨時過足棋癮,而且這類軟件大都水平頗高,大有與人腦分庭抗禮之勢。</p><p> 五
20、子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。同時具有簡單易學、既動手又動腦的特點。五子棋游戲不僅能增強人們的抽象思維能力、邏輯推理能力、空間想象力,提高人們的記憶力、心算能力等,而且深含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑方式所特有的特征“短、平、快” ,又有中國古典哲學所包含的高深學問“陰陽易理”;它既有簡單易學的特點,為人民群眾所喜聞樂見,又有深奧的技巧;既能組織舉辦群眾性的比賽、活動,又能組織
21、舉辦高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀,它是中西方文化的交融點,也是中西方文化交流的一個平臺。</p><p> 五子棋的根在中國,在這個國境里,他有著廣泛的群眾基礎。但與世界先進的五子棋技術相比,我們的棋藝水平還要繼續(xù)提高,所以我們要推廣五子棋,宣傳五子棋,爭取在較短的時間內(nèi)趕上和超過世界五子棋壇的先進水平。在這種環(huán)境下,開發(fā)一個易學實用的五子棋游戲軟件是很有必要的。</
22、p><p><b> 五子棋的介紹</b></p><p> 五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five In a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。相傳早在堯造圍棋之前,五子棋游戲在民間已經(jīng)相當盛行了。據(jù)《
23、增山海經(jīng)》中記載:“休輿之山有石焉,名曰帝臺之棋,五色而文狀鶉卵?!薄掇o海》中亦言:“五子棋中棋類游戲,棋具與圍棋相同,兩人對局,輪流下子,先將五子連成一行者為勝。”唐時由高麗使者帶到高麗,后來輾轉(zhuǎn)反復,流傳到日本。起先是在日本皇宮內(nèi)盛行的游戲,只限于王室成員、貴族階層之間的對弈,后來據(jù)說被出入皇宮的挑夫看見,由此便流行民間。</p><p> 五子棋起源于古代中國,發(fā)展于日本,風靡于歐洲。對于它與圍棋的關系有
24、兩種說法,一種說法是早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;另一說法是源于圍棋,是圍棋發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、日本等地。據(jù)日本史料文獻介紹,中國古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1704年的日本元祿時代傳到日本的。到日本明治32年(公元1899年),經(jīng)過公開征名,“連珠”這一名稱才被正式確定下來,
25、取意于“日月如合壁,五星如連珠”。從此,連珠活動經(jīng)過了不斷的改良,主要是規(guī)則的變化(即對執(zhí)黑棋一方的限制)。例如,1899年規(guī)定,禁止黑白雙方走“雙三” ;1903年規(guī)定,只禁止黑方走“雙三” ;1912年規(guī)定,黑方被迫走“雙三”亦算輸;1916年規(guī)定,黑方不許走“長連” ;1918年規(guī)定,黑方不許走“四、三、三” ;1931年規(guī)定,黑方不許走“雙四” ,并規(guī)定將19×19的圍棋盤改為15×15的連珠專用棋盤。<
26、;/p><p> 本世紀初五子棋傳入歐洲并迅速風靡全歐。通過一系列的變化,使五子棋這一簡單的游戲復雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時也成為一種國際比賽棋。</p><p> 現(xiàn)代五子棋(連珠)的基本下法是:先由執(zhí)黑棋一方將一枚棋子落在天元點上,為了尊重對方和出于禮貌,持白棋的一方通常將盤面的第二手棋布在天元下方周圍。</p><p><b>
27、; 系統(tǒng)設計思想</b></p><p> 一個優(yōu)秀的游戲軟件,必須有一個正確的設計思想,通過合理地選擇數(shù)據(jù)結(jié)構、操作系統(tǒng)以及開發(fā)環(huán)境,構成一個完善的體系結(jié)構,才能充分發(fā)揮計算機應用的優(yōu)勢。根據(jù)游戲玩家的實際需求,本系統(tǒng)的設計按照下述原則進行。</p><p> ?。?)實用性:系統(tǒng)以用戶需求為目標,以方便用戶為原則,同時融入先進的設計思想。根據(jù)用戶實際的需求情況,量身制作
28、一個功能齊全、操作簡單、實用性強的游戲軟件。充分滿足游戲玩家的需求,真正成為為玩家提供輕松、娛樂、休閑的工具。</p><p> ?。?)先進性:本軟件將充分應用現(xiàn)有成熟的計算機技術、軟件開發(fā)技術,為用戶提供高性能的系統(tǒng),可以方便的實現(xiàn)玩家的需要。</p><p> ?。?)高可靠性:一個實用的系統(tǒng)同時必須是可靠的,本系統(tǒng)通過合理而先進的結(jié)構設計以及軟、硬件的優(yōu)化選型,可保證系統(tǒng)的可靠性與
29、容錯性。</p><p> ?。?)可維護性:系統(tǒng)的設計要求方便維護,包括硬件的維護,軟件的維護(更改,升級等)。</p><p> ?。?)可擴展性及靈活性:系統(tǒng)的設計以方便未來業(yè)務的擴展和系統(tǒng)擴充為目標,系統(tǒng)要求能夠方便的升級,充分保護系統(tǒng)的投資。玩家可以根據(jù)自己的需要,靈活設置自己的游戲。</p><p> ?。?)智能性:智能化是這個游戲軟件的一大特色。系統(tǒng)
30、在設計時,充分考慮系統(tǒng)運行的智能性,如果有充足的時間改進,計算機就可以實現(xiàn)更高的AI,在游戲中走的每一步就會考慮得更周密。</p><p><b> 開發(fā)工具簡介</b></p><p> Visual Studio是微軟公司推出的開發(fā)環(huán)境。是目前最流行的Windows平臺應用程序開發(fā)環(huán)境。Visual Studio 2010版本于2010年4月12日上市,其集成
31、開發(fā)環(huán)境(IDE)的界面被重新設計和組織,變得更加簡單明了。Visual Studio 2010同時帶來了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview--CTP),并且支持開發(fā)面向Windows 7的應用程序。除了Microsoft SQL Server,它還支持 IBM DB2和Oracle數(shù)據(jù)庫 。</p>
32、;<p> Visual Studio 2010特點:支持Windows Azure,微軟云計算架構邁入重要里程碑;助力移動與嵌入式裝置開發(fā),三屏一云商機無限;實踐當前最熱門的 Agile/Scrum 開發(fā)方法,強化團隊競爭力;升級的軟件測試功能及工具,為軟件質(zhì)量嚴格把關;搭配Windows 7,Silverlight4 與 Office,發(fā)揮多核并行運算威力;創(chuàng)建美感與效能并重的新一代軟件;支持最新C++標準,增強ID
33、E,切實提高程序員開發(fā)效率。</p><p><b> 關于MFC簡介</b></p><p> MFC(Microsoft Foundation Classes),是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API,并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句
34、柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。 </p><p> MFC:微軟基礎類(Microsoft Foundation Classes),同VCL類似,是一種應用程序框架,隨微軟Visual C++開發(fā)工具發(fā)布。目前最新版本為10.0(截止2011年3月),并且發(fā)布了中文版。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用,大部分類均從CObject 直接或間接派生,只有少部分類例外。[1]&l
35、t;/p><p> MFC應用程序的總體結(jié)構通常由開發(fā)人員從MFC類派生的幾個類和一個CWinApp類對象(應用程序?qū)ο螅┙M成。MFC 提供了MFC AppWizard 自動生成框架。</p><p> Windows 應用程序中,MFC 的主包含文件為"Afxwin.h"。</p><p> 此外MFC的部分類為MFC/ATL 通用,可以在W
36、in32 應用程序中單獨包含并使用這些類。</p><p> 由于它的易用性,初學者常誤認為VC++開發(fā)必須使用MFC,這種想法是錯誤的。作為Application Framework,MFC的使用只能提高某些情況下的開發(fā)效率,只起到輔助作用,而不能替代整個Win32 程序設計。</p><p><b> 論文結(jié)構</b></p><p>
37、 本論文共分5章,文章的結(jié)構安排如下:</p><p> 第1章緒論。闡明了本課題研究的背景以及有關本課題的介紹、本課題系統(tǒng)設計思想和簡單介紹開發(fā)工具。</p><p> 第2章用戶需求分析。詳細描述本系統(tǒng)的編寫目的,任務概述,進行功能模塊分類,表明對系統(tǒng)的要求,為系統(tǒng)設計做好準備。</p><p> 第3章總體設計。提出對系統(tǒng)環(huán)境的要求,描述本系統(tǒng)的總體設
38、計過程以及系統(tǒng)算法設計。</p><p> 第4章詳細設計。給出了系統(tǒng)程序流程圖,提出了系統(tǒng)運行平臺的設置以及描述了系統(tǒng)主要功能的實現(xiàn)。</p><p> 第5章系統(tǒng)的實現(xiàn)和測試。主要是給出系統(tǒng)主要功能的實現(xiàn)的截圖。</p><p><b> 需求分析</b></p><p><b> 需求分析的編寫目
39、的</b></p><p> 本需求分析報告的目的是規(guī)范化本軟件的編寫,旨在為五子棋游戲軟件的開發(fā)做前期調(diào)查,進行全面細致的用戶需求分析,明確所要開發(fā)的軟件應具有的功能、性能和界面,提高系統(tǒng)開發(fā)過程中的能見度,便于對系統(tǒng)開發(fā)過程中的控制與管理,同時提出了本系統(tǒng)的軟件開發(fā)過程,作為工作成果的原始依據(jù),同時也表明了本系統(tǒng)的共性,以期能夠獲得更大范圍的應用。</p><p><
40、;b> 可行性研究</b></p><p><b> 技術可行性</b></p><p> 系統(tǒng)現(xiàn)階段的發(fā)展過程中,利用現(xiàn)有人力和物力是完全具備的能力開發(fā)出來的,本系統(tǒng)的實現(xiàn)方法步驟簡單容易,所以本系統(tǒng)的技術上是完全可行的。 </p><p> (1)在當前的限制條件下,該系統(tǒng)的功能目標能達到; &
41、lt;/p><p> (2)利用現(xiàn)有的技術,該系統(tǒng)的功能能實現(xiàn); </p><p> ?。?)對開發(fā)人員的數(shù)量和質(zhì)量的要求并說明這些要求應該能滿足; </p><p> ?。?)在規(guī)定的期限內(nèi),本系統(tǒng)的開發(fā)能完成。 </p><p><b> 法律可行性 </b></p>
42、;<p> 本系統(tǒng)只用于個人消遣娛樂,無廣告,不收取任何費用,不透露任何私人信息,在法律 方面是完全可行的。 </p><p><b> 經(jīng)濟可行性</b></p><p> 本系統(tǒng)開發(fā)成本低,不需要過多人員、金錢和特殊要求。</p><p><b> 可行性結(jié)論 </b>
43、;</p><p> 綜上所述,本工程的技術相當成熟,完備也比較完善,測試手段可靠,具有良好的市場 拓展,技術上可行,經(jīng)濟上可行,操作上可行,因此本工程可立即開始。</p><p><b> 五子棋游戲規(guī)則</b></p><p><b> 無禁手規(guī)則 </b></p><p>
44、黑白雙方依次落子,由黑先下,當棋盤上有三個子時(兩黑一白),如果此時白方覺得開的局不利于自已可以提出交換,黑方無條件接受!也可以不交換,主動權在白方!然后繼續(xù)下棋,任一方先在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)棋子的一方為勝。 </p><p><b> 禁手規(guī)則</b></p><p> 禁手是針對黑棋而言的,禁手是指一手黑棋棋形成:雙
45、活三,雙四,長連(五子以上)為輸!這種方法限制了黑棋先行的優(yōu)勢!禁手對白棋無效!</p><p><b> 禁手的解釋</b></p><p> 圖2.1至圖2.8的x點為黑棋的禁手點</p><p> 圖2.1三三禁手-示例1 圖2.2三三禁手-示例2</p><p> 圖2.3四四禁手-示
46、例1 圖2.4四四禁手-示例2</p><p> 圖2.5四四禁手-示例3</p><p> 圖2.6四四禁手(扁擔陣)示例</p><p> 圖2.7四三三禁手示例 圖2.8長連禁手示例</p><p><b> 任務概述</b></p><p&
47、gt;<b> 目標</b></p><p> 本系統(tǒng)要實現(xiàn)的目標:作為一個悠閑的小游戲軟件,首先應該為用戶提供一套方便的操作方法,在游戲模式、用戶操作、反饋信息方面應該有明確的說明,能夠讓大多數(shù)玩家能快速上手,使該游戲看上去是一款悠閑的精品。</p><p> 本系統(tǒng)能夠?qū)崿F(xiàn)以下功能:</p><p> ?。?)有人機對戰(zhàn)和人人對戰(zhàn)兩種
48、模式供玩家選擇;</p><p> ?。?)在開局和退出以及下棋錯誤的情況下都有提示音;</p><p><b> ?。?)悔棋;</b></p><p><b> ?。?)認輸;</b></p><p><b> 處理對象</b></p><p>
49、 五子棋棋盤為15*15:棋盤正中一點為“天元”。棋盤兩端的橫線稱端線。棋盤左右最外邊的兩條縱線稱邊線。從兩條端線和兩條邊線向正中發(fā)展而縱橫交叉在第四條線形成的四個點稱為“星”。</p><p><b> 安全性和完整性</b></p><p> 考慮到系統(tǒng)實施的可行性,在軟件方面選擇了性能穩(wěn)定的VS2010開發(fā)環(huán)境、C++語言來進行開發(fā)。VS2010是非常成熟的
50、開發(fā)工具,因此無論在安全性、可用性及可靠性等方面都毫無置疑,因此軟件方面是可行的。</p><p> 在硬件方面,則選擇空間較大,只要是Pentium III系列及以上的計算機,內(nèi)存在256M以上,硬盤在1GB,都可以滿足系統(tǒng)的開發(fā)需要。當然,硬件的配置越高,系統(tǒng)的開發(fā)與運行會更流暢。考慮到如今的家用或商用電腦硬件的整體配置水平,系統(tǒng)在硬件方面是可行的。</p><p><b>
51、; 功能模塊分類</b></p><p> 五子棋游戲是在系統(tǒng)地分析了游戲玩家的各項需求,以實際為基礎進行設計的。本系統(tǒng)可以進行人與計算機的對弈,還可以實現(xiàn)兩個人在同一臺計算機上對弈。本系統(tǒng)包括三大模塊:游戲模塊、選項模塊、幫助模塊。每個模塊包括的主要內(nèi)容如下:</p><p> 游戲模塊:新游戲、人人對戰(zhàn)、人機對戰(zhàn)、退出。</p><p> 選
52、項模塊:悔棋、認輸。</p><p> 幫助模塊;游戲規(guī)則、有關本軟件的介紹。</p><p> 本系統(tǒng)的主要功能模塊,如下圖2.9所示</p><p> 圖2.9系統(tǒng)主要功能模塊圖</p><p><b> 總體設計</b></p><p><b> 系統(tǒng)環(huán)境要求</b
53、></p><p> 服務器:要求處理器為Pentium III 兼容處理器或更高速度的處理器,處理器速度最低要求:600 MHz,推薦使用:1 GHz 或更高,80GB或以上可使用硬盤空間內(nèi)存最低要求:512 MB,推薦使用:1 GB 或更大,最大:操作系統(tǒng)最大內(nèi)存。</p><p> 客戶機:要求處理器為Pentium III 兼容處理器或更高速度的處理器,處理器速度最低要求
54、:600 MHz,推薦使用:1 GHz 或更高,內(nèi)存最低要求:512 MB,推薦使用:1 GB 或更大,最大:操作系統(tǒng)最大內(nèi)存。</p><p><b> 總體設計過程</b></p><p> 總體設計過程通常由四個主要階段組成:系統(tǒng)體系結(jié)構設計,確定系統(tǒng)的具體體系結(jié)構實現(xiàn)方案;系統(tǒng)模塊設計,確定系統(tǒng)模塊層次;結(jié)構算法設計,確定軟件結(jié)構和典型算法;交互設計,確定
55、系統(tǒng)的交互界面。</p><p> 高效率的程序基于良好的數(shù)據(jù)結(jié)構與算法,一般來說,數(shù)據(jù)結(jié)構與算法就是一類數(shù)據(jù)的表示及其相關的操作。從數(shù)據(jù)表示的觀點來看,存儲在數(shù)組中的一個有序整數(shù)表也是一種數(shù)據(jù)結(jié)構。算法是指對數(shù)據(jù)結(jié)構施加的一些操作。一個算法如果能在所要求的資源限制范圍內(nèi)將問題解決好,則稱這個算法是有效率的。一個算法如果比其他已知算法所需要的資源都少,這個算法也稱為是有效率的。算法的代價是指消耗的資源量。一般來
56、說,代價是由一個關鍵資源,例如時間或空間來評估的。</p><p><b> 系統(tǒng)的算法設計</b></p><p> 五子棋游戲的開發(fā)在搜索算法方面,可以有多種選擇。通過從不同的角度分析各種搜索方法的效率,來考慮本系統(tǒng)的算法應用。</p><p> 下面詳細地介紹一些算法:</p><p><b>
57、博弈樹</b></p><p> 設想下五子棋的情形,兩人對弈,我們將其中一位叫做甲,另一位叫做乙。假定現(xiàn)在該甲下棋,甲可以有225種走法(不論好壞);而對甲的任一走法,乙也可以有與之相對的若干種下法。然后又輪到甲走棋,對乙的下法甲又有若干種方法應對。如此往復。顯然,我們可以依此構建一棵博弈樹,將所有的走法羅列出來。在這棵樹的根部是棋局的初始局面。根的若干子節(jié)點則是由甲的每一種可能走法所生成的局面,
58、而這些節(jié)點的子節(jié)點則是由與之相對的乙的每一種可能走法所生成的局面。在這棵樹的末梢,是結(jié)束的棋局,甲勝或者乙勝或者是雙方都無法取勝的平局。如果我們令甲勝的局面值為WIN,乙勝的局面值為LOST,而和局的值為DRAW。當輪到甲走時,甲定會選擇子節(jié)點值為WIN或DRAW(如果沒有值為WIN的子節(jié)點的話)的下法;而輪到乙時,乙則會選擇子節(jié)點值為LOST或DRAW(如果沒有值為LOST的子節(jié)點的話)的下法。對于中間節(jié)點的值可以有如下計算方法:如果
59、該節(jié)點所對應的局面輪到甲下棋,則該節(jié)點的值是其所有子節(jié)點中值最佳(對甲而言)的一個的值;如果該節(jié)點所對應的局面輪到乙走棋,則該節(jié)點的值是其所有子節(jié)點中值最差(對甲而言)的一個的值。這樣看來從這</p><p> 但是在五子棋游戲中,我們沒有建立完全搜索樹的可能。一方面是因為很多情形根本就到達不了葉子節(jié)點。另一方面,這棵樹上的節(jié)點數(shù)量也已多到了無法處理的程度。所以我們需要其它的算法來減少搜索的數(shù)量。</p&
60、gt;<p> 極大極小值算法(Minimax Algorithm)</p><p> 在上面的博弈樹中,如果我們令甲勝的局面值為1,乙勝的局面值為-1,而和局的值為0。當輪到甲下棋時,甲定會選擇子節(jié)點值最大的下法;而輪到乙時,乙則會選擇子節(jié)點值最小的下法。所以,對于中間節(jié)點的值可以有如下計算方法:如果該節(jié)點所對應的局面輪到甲下棋,則該節(jié)點的值是其所有子節(jié)點中值最大的一個的值。而如果該節(jié)點所對應
61、的局面輪到乙下棋,則該節(jié)點的值是其所有子節(jié)點中值最小的一個的值。</p><p> 對博弈樹的這個變化僅僅是形式上的,本質(zhì)上絲毫未變,但是這個形式更容易推廣以運用到一般實際的情形。</p><p> 既然建立整棵的搜索樹不可能,那么,為當前所面臨的局面找出一步好棋如何?也就是通過少量的搜索,為當前局面選擇一步較好的走法。</p><p> 在通常的棋局當中,一
62、個局面的評估往往并不像輸、贏、平3種狀態(tài)這么簡單,在分不出輸贏的局面中棋局也有優(yōu)劣之分。也就是說,要用更細致的方法來刻畫局面的優(yōu)劣,而不是僅僅使用1、-1、0三個數(shù)字刻畫3種終了局面。假定我們有一個函數(shù)可以為每一局面的優(yōu)劣評分。例如甲勝為+∞;乙勝為-∞;和局為0;這樣我們可以建立一棵固定深度的搜索樹,其葉子節(jié)點不必是終了狀態(tài),而只是固定深度的最深一層的節(jié)點,其值由上述函數(shù)評出;對于中間節(jié)點,如同前面提到的那樣,甲方取子節(jié)點的最大值,乙
63、方取子節(jié)點的最小值。這個評分的函數(shù)稱作靜態(tài)估值函數(shù)(Static Evaluation Function)。用以取代超出固定深度的搜索。顯然,我們無法擁有絕對精確的靜態(tài)估值函數(shù)。否則,只要這個靜態(tài)估值函數(shù)就可以解決所有的棋局了。估值函數(shù)給出的只是一個較粗略的評分,在此基礎上進行的少量搜索的可靠性,理論上是不如前述的WIN,LOST,DRAW三種狀態(tài)的博弈樹的,但這個方法卻是可實現(xiàn)的。利用具體的知識構成評估函數(shù)的搜索叫做啟發(fā)式搜索(Heu
64、ristic Search)。估值函數(shù)在有些文獻中也稱為啟發(fā)函數(shù)(Heuristic Functio</p><p> 在博弈樹搜索的文獻當中,極大極小方法往往指的是基于靜態(tài)估值函數(shù)的有限深度的極大極小搜索。MinMax算法是對弈的基礎思想。</p><p> 負極大值算法(Negamax Algorithm)</p><p> 普通的極大極小值算法看起來有
65、一點笨,既然一方試圖取極大值而另一方試圖取極小值——也就是說——我們總要檢查哪一方要取極大值而哪一方又要取極小值,以執(zhí)行不同的動作。Knuth和Moore在1975年提出了負極大值(Negamax)方法,消除了兩方的差別,而且簡潔優(yōu)雅。使用負極大值方法,博弈雙方都取極大值。</p><p> Alpha-Beta搜索</p><p> 在極大極小搜索的過程中,存在著一定程度的數(shù)據(jù)冗余。
66、舉一個最簡單的例子:在象棋博弈的過程中,如果某一個節(jié)點輪到甲走棋,而甲向下搜索節(jié)點時發(fā)現(xiàn)第一個子節(jié)點就可以將死乙(節(jié)點值為最大值),則剩下的節(jié)點就無需再搜索了,甲的值就是第一個子節(jié)點的值。這個過程,就可以將大量冗余的(不影響結(jié)果的)節(jié)點拋棄。</p><p> 將上述這個情形推廣一下,設想有如圖3.1左半部所示的一棵極大極小樹的片斷,節(jié)點下面數(shù)字為該節(jié)點的值,節(jié)點B的值為18,節(jié)點D的值為16,由此我們可以判斷
67、節(jié)點C的值將小于等于16(取極小值);而節(jié)點A的值為節(jié)點Max(B,C),為18,也就是說不再需要估算節(jié)點C的其他子節(jié)點如E、F的值就可以得出父節(jié)點A的值了。這樣將節(jié)點D的后繼兄弟節(jié)點減去稱為Alpha剪枝(alpha cutoff)。</p><p> 圖3.1 Alpha-Beta剪枝示例圖</p><p> 設想有如圖3.1右半部所示的一棵極大極小樹的片斷,節(jié)點B的估值為8,節(jié)點
68、D的估值為18,由此我們可以判斷節(jié)點C的值將大于等于18(取極大值);而節(jié)點A的值為節(jié)點Min(B,C),為8。也就是說不再需要求節(jié)點C的其他子節(jié)點如E、F的值就可以得出父節(jié)點A的值了。這樣將節(jié)點D的后繼兄弟節(jié)點減去稱為Beta剪枝(beta cutoff)。</p><p> 置換表(Transposition Table)</p><p> 在極大極小搜索的過程中,改進搜索算法的目
69、標在于將不必搜索的(冗余)分枝從搜索的過程中盡量剔除,以達到搜索盡量少的分枝來降低運算量的目的。</p><p> 在先前談到的幾種搜索算法中,我們看到可以通過 Alpha-Beta剪枝來剪除兩種類型的冗余分枝/節(jié)點,但是已經(jīng)搜索過的節(jié)點不可以免于搜索。</p><p> 從極大極小樹的片斷中,我們可以看出,該片斷從節(jié)點A開始,有兩個分B和C(為簡化問題,其他節(jié)點從略),B 有子節(jié)點D
70、,C有子節(jié)點E,再往下D有子節(jié)點F,E有子節(jié)點G。讀者可以看到,在極大極小樹的不同分枝上,存在著完全相同的節(jié)點。在上圖中,節(jié)點F和G完全相同。對于節(jié)點F,在搜索分枝的時候,就可能已經(jīng)搜索過了。那么,在搜索節(jié)點G的子節(jié)點時,我們能不能直接利用已經(jīng)搜索過的節(jié)點F的結(jié)果,而不是重新搜索一遍節(jié)點G?</p><p> 想法是可行的。如果要利用已經(jīng)搜索過的節(jié)點的結(jié)果,我們就要用一張表把搜索過的節(jié)點記錄下來。然后在后續(xù)的搜
71、索中,察看記錄在表中的這些結(jié)果,如果將要搜索的某個節(jié)點已有記錄,就直接利用記錄下來的結(jié)果。這種方法叫做置換表(Transposition Table,簡稱TT)。</p><p> 如果將Alpha-Beta搜索過程中每一節(jié)點的結(jié)果都記錄下來,則在任意節(jié)點向下搜索之前先查看這些紀錄,就可避免上述重復的操作。</p><p> 但是這個置換表如何實現(xiàn)的?困難集中在時間和空間復雜度上。&l
72、t;/p><p> 1.可能的節(jié)點可以認為是無窮多,將其存入一張表中要占據(jù)多少存儲空間呢?</p><p> 2.即使有無窮多內(nèi)存空間,一個節(jié)點要從表中找到自己對應的一項,需要花費多少時間?雖然有序表可用二分查找等快速的算法,但要維持表中內(nèi)容有序,又要進行大量排序操作,會耗費更多時間。如何解決?</p><p> 哈希表(Hash Table)</p>
73、<p> 置換表的實現(xiàn)在時間和空間復雜度上的疑問。實際上已經(jīng)明確了要實現(xiàn)置換表必須要滿足如下條件:</p><p> 1.查找記錄中的節(jié)點數(shù)據(jù)時速度要非???,最好是類似于隨機存取。</p><p> 2.將節(jié)點數(shù)據(jù)放入記錄的速度也要非常快。這就意味著數(shù)據(jù)項插入的過程不可有數(shù)據(jù)移動排序等操作。</p><p> 3.要能在有限的存儲空間內(nèi)進行。&
74、lt;/p><p> 可以利用哈希表,哈希方法的思想為每一個學過數(shù)據(jù)結(jié)構或算法課程的開發(fā)人員所熟知。對棋類博弈來說,定義一個巨大的數(shù)組,將每一局面記入其中,每一局面在數(shù)組中對應惟一的位置。這樣,將數(shù)據(jù)記入和取出就類似于隨機讀寫,不會有耗時的查找和插入過程。但是,以象棋而論,如果為每一局面在數(shù)組中對應一個與其他局面不同的位置的話,則組合的結(jié)果是全世界所有的計算機內(nèi)存加起來也不夠這樣一個數(shù)組用。</p>
75、<p> 那么讓每一局面在數(shù)組中對應惟一的位置,但并不保證數(shù)組中每一個數(shù)據(jù)項對應惟一的局面如何呢?比如將所有的局面對應在106單位的數(shù)組上。這樣,必然有一些局面對應在相同的位置上;但是對一次搜索而言,這種情況發(fā)生的概率并不高。一旦某個搜索過的局面在該數(shù)組中未找到,我們不過是對它進行Alpha-Beta搜索而已。不同的局面對應在數(shù)組中同一存儲單元上的情形,叫做沖突。</p><p> 我們將利用哈希方
76、法實現(xiàn)置換表的方法敘述如下。定義哈希數(shù)組如表3.1所示:</p><p> 表3.1定義哈希數(shù)組</p><p> 對要搜索的每一節(jié)點,計算出它的一個哈希值(hashIndex,通常是一個32位數(shù)對哈希表大小取模)以確定此局面在哈希表中的位置。計算另一個64位的哈希值(Checksum)來校驗表中的數(shù)據(jù)項是否是所要的那一項。</p><p> 在對某一局面搜索
77、之前,先查看哈希表項 hashTable[hashIndex],如果 hashTable[hashIn-dex].checksum==Checksum并且hashTable[hashIndex].depth 大于等于最大搜索深度減去當前層數(shù),就返回hashTable[hashIndex].eval作為當前局面的估值。</p><p> 當對一個局面的搜索完成之后,將Checksum、當前層數(shù)和估值結(jié)果保存到 h
78、ashTable[hashIndex]當中,以備后面的搜索使用。</p><p> 歷史啟發(fā)(History Heuristic)</p><p> 在前面我們曾經(jīng)提到過,Alpha-Beta搜索的剪枝效率,幾乎完全取決于節(jié)點的排列順序。在節(jié)點排列順序處于理想狀態(tài)的情況下,Alpha-Beta搜索需遍歷的節(jié)點數(shù)僅為極大極小算法所需遍歷的節(jié)點數(shù)的平方根的兩倍左右。也就是說對一棵極大極小樹
79、來說,如果極大極小搜索需遍歷106個節(jié)點求得結(jié)果,那么處于理想狀態(tài)的 Alpha-Beta搜索僅需遍歷約2000個節(jié)點就可求得結(jié)果。而在節(jié)點的排序最不理想的情況下,Alpha-Beta搜索要遍歷的結(jié)點數(shù)同極大極小算法一樣多。如何調(diào)整待展開的走法排列的順序,是提高搜索效率的關鍵。</p><p> 根據(jù)部分已經(jīng)搜索的結(jié)果來調(diào)整將要進行搜索的節(jié)點順序是一個可行的方向。通常一個局面經(jīng)搜索得知較好時,在其后繼節(jié)點當中往
80、往有一些相似的局面,僅有一些無關緊要的棋子位置不同等等。這些相似的局面往往也是較好的??梢酝ㄟ^一些較復雜的判斷來找出這些相似的局面,率先搜索從而提高剪枝效率。但這一方法需要具體棋類相關的知識,并且往往判斷復雜而效果不彰。</p><p> J.Schaeffer提出了History Heuristic的方法,在基于Alpha-Beta的搜索當中,一個好的走法可以定義如下:</p><p>
81、; 1.由其產(chǎn)生的節(jié)點引發(fā)了剪枝。</p><p> 2.未引發(fā)剪枝,但是其兄弟走法中的最佳者。</p><p> 在搜索的過程中,每當找到一個好的走法,就將與該走法相對應的歷史得分作一個增量,一個多次被搜索并確認為好的走法的歷史紀錄就會較高,當搜索中間節(jié)點時,將走法根據(jù)其歷史得分排列順序,以獲得較佳的排列順序。這比采用基于棋類知識而對節(jié)點排序的方法要容易得多。由于歷史得分表隨搜索而
82、改變,對節(jié)點順序的排列也會隨之動態(tài)改變。</p><p><b> 詳細設計</b></p><p><b> 系統(tǒng)程序流程圖</b></p><p> 1.程序流程圖的作用</p><p> 程序流程圖是人們對解決問題的方法、思路或算法的一種描述。</p><p>
83、<b> 2.流程圖的優(yōu)點:</b></p><p> ?。?)采用簡單規(guī)范的符號,畫法簡單;</p><p> ?。?)結(jié)構清晰,邏輯性強;</p><p> ?。?)便于描述,容易理解;</p><p> 3.本系統(tǒng)的程序流程為玩家進入游戲后,默認為人機對弈,如果玩家是兩個人,可以在游戲菜單中,選擇人人對戰(zhàn)模式,
84、接下來就是對弈過程,每下一步棋,都會進行本局游戲是否結(jié)束的判斷,結(jié)束的標志是游戲的一方有五個棋子相連。如果本局游戲沒有結(jié)束,則玩家可以通過選項菜單中的悔棋和認輸來實現(xiàn)悔一步棋和主動認輸?shù)墓δ?。如果本局游戲結(jié)束,則會彈出哪方獲得了勝利。本系統(tǒng)的程序流程,如圖4.1所示。</p><p> 圖4.1系統(tǒng)的程序流程</p><p><b> 系統(tǒng)運行平臺設置</b>&l
85、t;/p><p> 硬件環(huán)境:臺式計算機(PC)一臺。</p><p><b> 系統(tǒng)主要功能的實現(xiàn)</b></p><p><b> 程序系統(tǒng)結(jié)構</b></p><p> 程序系統(tǒng)結(jié)構如圖4.2所示</p><p> 圖4.2程序系統(tǒng)結(jié)構</p>&l
86、t;p><b> 初始化棋盤</b></p><p> 由于游戲的棋盤大小是一定的,不能改變大小的,是應該符合要求的。所以首先需要設置窗口的大小。設置的對話框的長為530,寬為490,并且對話框在屏幕的中央顯示,代碼如表4.1所示。</p><p> 表4.1設置窗口大小和位置</p><p> 然后在OnPaint函數(shù)中畫棋盤、
87、背景、天元和星以及黑棋和白棋,RGB(210,180,140)代表棋盤背景為棕褐色,棋盤是15*15的標準棋盤,每一個間隔距離是30,天元和星是以邊長為10的正方形表示的,填充顏色為黑色。并且以半徑為15的圓分別填充黑白兩色來代表黑白棋,代碼如表4.2所示。</p><p> 表4.2初始化棋盤的各種對象</p><p><b> 下棋操作</b></p&g
88、t;<p> 首先聲明變量m_flag來判斷是否要捕捉鼠標消息.m_flag=1時,捕捉消息,m_flag=0時,不要捕捉消息,接下來聲明變量m_mode定義游戲模式(人人對戰(zhàn)或者人機對戰(zhàn)).m_mode=0時,為人機對戰(zhàn)(默認),m_mode=1時,為人人對戰(zhàn)。最后聲明m_color來判斷當前誰走棋(m_color=-1時,白棋走;m_color=1時,黑棋走),具體代碼如表4.3所示、流程圖如圖4.3所示。</
89、p><p> 圖4.3下棋操作流程圖</p><p><b> 表4.3下棋操作</b></p><p><b> 判斷輸贏</b></p><p> 接著是用一個IsOver()函數(shù)判斷是否結(jié)束,是則結(jié)束并重新開始;否則,接著把鼠標變成對方棋子,表示對方下棋。</p><p
90、> 此函數(shù)是利用剛下棋的位置為中心,檢查它各個方向上的連續(xù)五個棋子是否同色,是則結(jié)束并重新開始。</p><p> 然而,判斷一個方向上的五個棋子的是否同色就涉及到聲明棋盤數(shù)組wzq[SIZE][SIZE],初始情況每一項為0;若黑棋按下,該項值為1;若白棋按下,該項值為-1,這樣就可以利用連續(xù)五個棋子的值相加,如果它們的值的絕對值等于5,則說明是同色,具體代碼如表4.4所示、流程圖如圖4.4所示。&l
91、t;/p><p><b> 圖4.4判斷輸贏</b></p><p><b> 表4.4判斷輸贏</b></p><p><b> AI算法</b></p><p> 所謂人機對戰(zhàn)就是人和計算機的博弈,計算機如何下棋就需要程序的設計與實現(xiàn)。然而,計算機不能隨便在棋盤上面放一
92、顆棋子。計算機要下的那個位置,必定是它認為最好的!當然,這里的最好是程序員給予計算機的,是計算機算法的體現(xiàn),下面主要介紹一下本文的AI博弈算法。</p><p> 在上文中聲明了wzq棋盤數(shù)組,賦值為1和-1,五個連續(xù)的棋子的值相加絕對值為5,則判斷為勝, 然而,它的功能不止于此,它幾乎關系到本程序的全部算法,當絕對值為4時,表示五個棋子中有一個空位置和四個同色的棋子;絕對值為3時,表示五個棋子中有兩個空位置和
93、三個同色的棋子,也表示五個棋子中有四個同色棋子和一個異色棋子;絕對值為2時,表示五個棋子中有三個空位置和兩個同色棋子,也表示五個棋子中一個空位置和三個同色棋子和一個異色棋子;當絕對值為0或1時,由于出現(xiàn)1和0的機會太少不必多加考慮,具體代碼如表4.5所示。</p><p><b> 表4.5 AI算法</b></p><p><b> 系統(tǒng)的實驗與測試&
94、lt;/b></p><p><b> 系統(tǒng)主要功能的實現(xiàn)</b></p><p><b> 初始化棋盤</b></p><p> 初始化棋盤界面如圖5.1所示,在實際操作中玩家可以在外圍的四個黑點的區(qū)域內(nèi)下棋,玩家可以選擇黑棋或者白棋。</p><p><b> 圖5.1棋
95、盤的實現(xiàn)</b></p><p><b> 人機對戰(zhàn)</b></p><p> 人機對戰(zhàn)界面如圖5.2所示,在實際操作中人機對戰(zhàn)時當一方取得勝利后,系統(tǒng)會自動提示勝利的一方,然后點擊確定,開始下一局。</p><p> 圖5.2人機對戰(zhàn)的實現(xiàn)</p><p><b> 人人對戰(zhàn)</b&
96、gt;</p><p> 人人對戰(zhàn)如圖5.3所示,在實際操作中玩家對戰(zhàn)時,當一方獲得勝利后,系統(tǒng)會自動提示勝利的一方,點擊確定,雙方可以開始下一局的對決。</p><p> 圖5.3人人對戰(zhàn)的實現(xiàn)</p><p><b> 認輸功能</b></p><p> 認輸界面如圖5.4所示,在實際操作中如果對戰(zhàn)一方,覺得
97、此局沒有勝利的可能了也可以選擇投降認輸,這樣可以節(jié)省游戲的時間。</p><p> 圖5.4認輸功能的實現(xiàn)</p><p><b> 游戲規(guī)則</b></p><p> 游戲規(guī)則如圖5.5所示,在實際操作中玩家點擊左上角幫助可以查看關于游戲的規(guī)則。</p><p><b> 圖5.5游戲規(guī)則</b
98、></p><p><b> 測試</b></p><p><b> 測試的任務</b></p><p> 在軟件完成之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤。</p><p><b> 測試的目標</b></p><p> 測試的目的是為了發(fā)現(xiàn)
99、程序中的錯誤而執(zhí)行程序的過程。</p><p> 好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案。</p><p> 成功的測試是發(fā)現(xiàn)了到今為止尚未發(fā)現(xiàn)的錯誤的測試。</p><p><b> 軟件測試的方法</b></p><p> 軟件測試有兩種方法:白盒法和黑盒法</p><p
100、> 如果知道了產(chǎn)品應該具有的功能,可以通過測試來檢測是否每個功能都能實現(xiàn),這種測試方法叫作黑盒測試法;如果知道產(chǎn)品的內(nèi)部工作過程,可以通過測試來檢驗是否按照規(guī)格說明說的規(guī)定正常運行,這個方法叫白盒測試法。對于軟件而言,黑盒測試法是把程序看成一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構和處理過程。也就是說黑盒測試是在程序的接口進行測試,它只檢查程序的功能是否按照規(guī)格說明說的說明正常運行,程序是否能恰當?shù)慕邮茌斎霐?shù)據(jù),產(chǎn)生正確的輸出信息,并
101、且保持外部信息的完整性。黑盒測試又稱為功能測試。與黑盒測試法相反,白盒測試法是把程序看成是裝在一個透明的白盒子里。也就是完全了解程序的結(jié)構和處理過程,這種方法按照程序內(nèi)部的邏輯測試程序,檢驗程序中的每條通路是否能按預定的要求正確工作,白盒測試又稱為結(jié)構測試。</p><p> 粗看起來,不論采用上述那種測試方法,只要對每一種可能的情況都進行測試,就可以得到完全正確的程序。包含所有可能情況的測試成為窮盡測試,對于
102、實際程序而言,窮盡測試通常是不可能做到的。使用黑盒測試法為了做到窮盡測試,至少對所有輸入數(shù)據(jù)的各種可能值的排列組合都進行測試,但是,由此得到的應該測試的情況,數(shù)字往往達到實際上根本無法測試的程度。實踐表明,用無效的輸入數(shù)據(jù)比有效的輸入數(shù)據(jù)進行測試往往能發(fā)現(xiàn)更多的錯誤。使用白盒測試法和使用黑盒測試法一樣也不可能做到窮盡測試。</p><p> 因為不能做到窮盡測試,所以軟件測試不可能發(fā)現(xiàn)程序中的所有錯誤。也就是所
103、通過測試并不能證明程序是完全正確的。但是,目的是要通過測試保證軟件愛你的可靠性,因此,必須仔細設計測試方案,力爭用盡可能少的測試發(fā)現(xiàn)盡可能多的錯誤。</p><p> 考慮到各種因素和條件的限制,決定采用黑盒測試方案。黑盒測試注重于測試軟件的功能性需求,也就是說黑盒測試要求軟件工程師列出程序所有功能需求的輸入條件。通過黑盒測試,我們能發(fā)現(xiàn)一些平時不能發(fā)現(xiàn)的細節(jié)性錯誤。五子棋游戲功能測試用例如表5.1所示。<
104、;/p><p><b> 表5.1測試用例</b></p><p><b> 結(jié)論</b></p><p> 以上就是設計這個游戲的全部過程,這款由C++軟件設計的五子棋游戲,從其圖形界面到游戲的風格都能很好的滿足廣大玩家的需求,而且從規(guī)矩上也繼承了傳統(tǒng)游戲的精髓,不論是人機對戰(zhàn),還是人人對戰(zhàn)都可以靈活運用,所以肯定會廣
105、受玩家的喜愛。</p><p> 五子棋在我國的很多大、中城市發(fā)展很快,尤其是首都北京,曾多次舉辦了五子棋的各種比賽,中央電視臺體育頻道也長期播放著五子棋的講座,還有,一些大型企業(yè)和單位也曾舉辦過五子棋的比賽。預計在幾年后,五子棋將成為國內(nèi)最受歡迎的項目之一。 </p><p> 中國作為五子棋的發(fā)源國,要對五子棋在下個世紀的發(fā)展起到世界性的推動作用。五子棋的發(fā)展在中國出現(xiàn)方
106、興未艾、星火燎原之勢。同時還有一大批的中生代棋手和充滿希望的“明日之星”。相信,中國棋手攀登五子棋巔峰的日子會早日來到。</p><p><b> 致謝</b></p><p> 為期一個學期的畢業(yè)設計即將結(jié)束,在此期間,在方老師和同學的幫助下,我順利地完成了本次設計任務。通過此次設計,我在軟件研發(fā)與測試方面有很大收獲。我要感謝所有幫助過我的人。</p>
107、;<p> 首先由衷地感謝我的指導老師*老師。能由*老師指導做畢業(yè)設計是我的榮幸,她的認真負責給了我很大的觸動,畢業(yè)設計的整個時間安排他都為我們規(guī)劃得很詳細,并定期檢查驗收,論文初稿的審核連標點符號都會指出來。在項目開發(fā)過程中,劉老師在學習和生活上給了我很大的關懷和照顧,與她的每次交流,她的思維方式、她的經(jīng)驗教訓,都使我受益匪淺。</p><p> 其次感謝我的父母還有家人,給了我無私的關懷,支
108、持著我的學業(yè)。希望他們永遠健康幸福。</p><p> 再次感謝我計算機專業(yè)的同學們,兩年半的時光我們一起度過、一起成長,有歡笑、有淚水,但不論苦與樂,都將成為我腦海中揮之不去的記憶。</p><p> 還要感謝培養(yǎng)了我的學院!感謝學院老師的教誨與培養(yǎng),從他們的課程中我學到了很多知識,并運用到了本次畢業(yè)設計中。</p><p> 雖然我在畢業(yè)設計過程中投入了大
109、量精力,但由于自己學識、水平的限制,在理論的深度和博弈算法的理解等方面還有著很多的不足之處,懇請各位師長批評指正!</p><p><b> 參考文獻</b></p><p> 王小春.PC游戲編程(人機博弈)[M].重慶大學出版社,2008:18-27.102-152.</p><p> Bruce Eckel著.C++編程思想[M].
110、劉宗田,邢紅等譯.機械工業(yè)出版社,2009:165-182.</p><p> Jesse Liberty著.21天學通C++[M].康博創(chuàng)作室譯.人民郵電出版社,2012.</p><p> Noel Llopis.C++游戲編程[M].李鵬,賈傳俊譯.清華大學出版社,2004.</p><p> Nicolai M.Josuttis著.C++標準程序庫[M
111、].侯捷,孟巖譯.華中科技大學出版社,2003.</p><p> 李紅.博弈樹搜索算法.長春工程學院學報[J].2007.</p><p> 顧德裕.極大極小值算法.蘇州絲綢工學院學報[J].2011.</p><p> 侯俊杰著.深入淺出MFC[M].第2版.華中科技大學出版社,2008.</p><p> 林舒揚.五子棋入門與提
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android五子棋游戲計算機專業(yè)畢業(yè)論文
- 五子棋游戲設計畢業(yè)論文
- 五子棋游戲的設計與實現(xiàn)【畢業(yè)論文】
- 畢業(yè)論文——五子棋游戲設計
- 五子棋游戲軟件工程課程設計
- 畢業(yè)論文---網(wǎng)絡五子棋游戲設計
- java五子棋游戲畢業(yè)論文
- 基于vc的五子棋游戲設計與實現(xiàn)【畢業(yè)論文】
- 基于vc的五子棋游戲軟件的設計與開發(fā)畢業(yè)設計
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設計
- 軟件工程畢業(yè)論文-五子棋對戰(zhàn)游戲平臺的設計與實現(xiàn)
- 計算機專業(yè)本科畢業(yè)論文-基于android平臺五子棋游戲的設計與實現(xiàn)
- 五子棋畢業(yè)論文
- 網(wǎng)絡五子棋的設計與實現(xiàn)-畢業(yè)論文
- 基于Android的五子棋游戲設計與實現(xiàn)畢業(yè)論文.doc
- 網(wǎng)絡五子棋五子棋設計與實現(xiàn).doc
- 軟件工程畢業(yè)論文-網(wǎng)絡五子棋的設計與實現(xiàn)
- qt網(wǎng)絡五子棋五子棋設計與實現(xiàn)
- 五子棋小游戲的設計與實現(xiàn)
- 基于java的五子棋游戲的設計——畢業(yè)論文
評論
0/150
提交評論