基于VC++的五子棋程序設(shè)計與實現(xiàn)_第1頁
基于VC++的五子棋程序設(shè)計與實現(xiàn)_第2頁
基于VC++的五子棋程序設(shè)計與實現(xiàn)_第3頁
基于VC++的五子棋程序設(shè)計與實現(xiàn)_第4頁
基于VC++的五子棋程序設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

畢業(yè)論文(設(shè)計)題目:基于VC++的五子棋程序設(shè)計與實現(xiàn)學(xué)部:專業(yè)班級:學(xué)號:學(xué)生姓名:指導(dǎo)教師姓名:指導(dǎo)教師職稱:年月日摘要C++語言是一種面向?qū)ο蟮恼Z言,盡管在當(dāng)前,可視化語言發(fā)展迅速,普及很快,但C++語言作為一種基礎(chǔ)的語言,它的有時依然存在,甚至有時它是不可替代的,特別是和硬件接口技術(shù)相聯(lián)系的軟件。五子棋游戲是一種簡單大眾的游戲,自計算機實現(xiàn)以來,深受廣大電腦玩家的喜愛,現(xiàn)在流行的五子棋游戲軟件大多缺乏美觀的界面,和容易的操作方法,電腦的AI值也不是很高。本文通過C++語言在計算機圖形方面的編程,設(shè)計了五子棋游戲軟件,使該軟件具有還算美觀和操作簡單的界面,在人機對戰(zhàn)時,分為低級,中級和專家級,加大對游戲的樂趣,當(dāng)然也可以實行人人對戰(zhàn)。本游戲是以C++語言作為開發(fā)工具,采用搜索算法設(shè)計最優(yōu)落子點開發(fā)的游戲軟件。本文就是介紹五子棋軟件設(shè)計的全過程。關(guān)鍵字C++語言面向?qū)ο笞顑?yōu)落子AbstractC++languageisanobject-orientedlanguage,althoughinthecurrent,visuallanguagedevelopedrapidly,spreadquickly,buttheC++languageasabasiclanguage,itissometimesstillexists,andsometimesitisirreplaceable,especiallywithhardwareinterfacetechnologyassociatedsoftware.Volkswagenbackgammongameisasimplegame,sincethecomputertorealize,themajorityofPCgamerslove,nowpopularbackgammongamesoftwarelacksmostbeautifulinterface,andeasymethodofoperation,AIvalueofthecomputerisnotveryhigh.Inthispaper,C++programminglanguageincomputergraphics,designabackgammongamesoftware,sothatthesoftwarehastheappearanceandoperationisfairlysimpleinterface,theman-machinewar,dividedintolow,intermediateandexpertlevel,increasethegamefun,ofcourse,canalsobeimplementedforallwar.ThisgameisbasedonC++languageasadevelopmenttool,thesearchalgorithmdesignoptimalpointdevelopedgamesoftware.Thisarticleistointroducethewholeprocessofbackgammonsoftwaredesign.KeywordC++languageObject-orientedtheoptimal

initial目錄TOC\o"1-3"\h\u78261緒論 6246931.1五子棋的簡介 681651.2VisualC++的介紹 7249521.3開發(fā)環(huán)境及運行環(huán)境 7121681.3.1開發(fā)環(huán)境 755451.3.2運行環(huán)境 762132系統(tǒng)分析 8162962.1系統(tǒng)調(diào)研 844262.2可行性分析 811992.3

技術(shù)可行性分析 9293273軟件架構(gòu) 1035753.1棋盤類 1053993.1.1主要成員變量 1067473.2主要成員函數(shù)說明 1016883.2.1清空棋盤 10107403.2.2繪制棋子 10130763.2.3左鍵消息 11316903.2.4繪制棋盤 11318333.2.5對方落子完畢 1155773.2.6勝負(fù)的判斷 11139713.3游戲模式類 1145043.3.1主要成員變量 11313093.3.2主要成員函數(shù) 12320153.4資源編輯 13326603.5消息說明 15213313.5.1落子消息 1548913.5.2聲音消息 15317193.5.3提示消息 15321403.5.4悔棋消息 15264163.5.5輸贏消息 15139413.5.6再次開局消息 16236224主要算法 17182784.1判斷勝負(fù) 17271334.2人機對弈算法 17105604.2.1獲勝組合 18157604.2.2落子后處理 18295274.2.3查找棋盤空位 18186774.2.4落子打分 18231454.2.5防守策略 1873194.2.6選取最佳落子 19107815軟件實現(xiàn) 1977515.1游戲運行 19247766補充說明 2373577結(jié)論 2432037致謝 241緒論1.1五子棋的簡介五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(FiveinaRow的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。五子棋的娛樂性強、規(guī)則簡單、易學(xué)、流行性廣,普通人不需長時間專門訓(xùn)練即可自如行棋,因此極受大眾喜歡。五子棋規(guī)則為:第一:五子棋行棋時,黑棋先下第一子,由天元開始,后白棋在黑棋周圍的交叉點的落子。接著黑方再以天元中心的25個交叉點的范圍內(nèi)落盤面的第三子,之后黑白雙方相互順序子。第二:最先在棋盤線交點橫向,縱向,斜向形成已方的五個棋子連續(xù)的一方為勝。第三:出現(xiàn)禁手對方指出后將判負(fù),其中包括兩個或兩個以上的活三,活四,長連均稱之為禁手。第四:禁手只對黑棋有效,白棋無禁手。第五:黑方禁手形成時,白方需立即指出,黑方將被判負(fù)。若白方未發(fā)現(xiàn)黑方禁手存在而繼續(xù)應(yīng)子,其后指出黑方禁手不能判黑方負(fù)。第六:黑方連五與禁手同時形成,因黑方已連成五即黑方已獲勝,故禁手規(guī)則失效。第七:在對局中,在盤上落下的子又拿起來,此動作稱為拔子,若拔子將被判為負(fù)。第八:在對局中棋子掉落在棋盤上將被判負(fù)。若推子或蹭子,以盤面第一落點為準(zhǔn)。用手將棋子推正不算違犯規(guī)則。第九:在對局中,一方自行中止比賽如:中途退場,將被判負(fù)。第十:在對局中對方宣布認(rèn)輸,本局獲勝。第十一:超過比賽規(guī)定所用時間限制,將被判為負(fù):正式比賽期間,遲到時間超過比賽容許時間將被判負(fù)。第十二:如下至最終一子仍不分勝負(fù)則定為平局。第十三:中盤期間雙方同意和局提議,判定為平局。1.2VisualC++的介紹VisualC++6.0,簡稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程序。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用有很大的局限性,只適用于Windows2000、WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0由Microsoft開發(fā),它不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發(fā)環(huán)境。Microsoft的主力軟件產(chǎn)品。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000,WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0以擁有“語法高亮”,自動編譯功能以及高級除錯功能而著稱。比如,它允許用戶進行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動正在調(diào)試的程序。其編譯及創(chuàng)建預(yù)編譯頭文件(stdafx.h)、最小重建功能及累加連結(jié)(link)著稱。這些特征明顯縮短程序編輯、編譯及連結(jié)的時間花費,在大型軟件計劃上尤其顯著。1.3開發(fā)環(huán)境及運行環(huán)境1.3.1開發(fā)環(huán)境Intel?Pentium?42.0GHz,512M內(nèi)存,80G硬盤;Microsoft?Windows?2000Professional;Microsoft?VisualC++6.0;Microsoft?DeveloperNetworkforVisualStudio.NET98;VisualAssistX10.1.1301.01.3.2運行環(huán)境Intel?Pentium?2及以上處理器,32M以上內(nèi)存,4G以上硬盤;Microsoft?Windows?9X/NT操作系統(tǒng);800*600或以上的屏幕分辨率2系統(tǒng)分析2.1系統(tǒng)調(diào)研正式開發(fā)五子棋游戲之前進行調(diào)研是非常必要的,其必要性主要表現(xiàn)在以下幾個方面。(1)明確用戶的要求,以根據(jù)調(diào)查結(jié)果進行可行性分析,確認(rèn)系統(tǒng)的開發(fā)是否可行。(2)提出新系統(tǒng)的人員并不都是系統(tǒng)研究人員,有些人對于其功能和處理數(shù)據(jù)的方法沒有明確的認(rèn)識。它們只是根據(jù)自己業(yè)務(wù)工作的需要提出了要求,系統(tǒng)開發(fā)人員要對此進行詳細(xì)的調(diào)查和分析,確認(rèn)用戶的要求可以通過現(xiàn)有的計算機技術(shù)實現(xiàn),保證開發(fā)的管理信息系統(tǒng)的功能與用戶提出的要求相吻合??傊匾獙ΜF(xiàn)行系統(tǒng)進行詳細(xì)的調(diào)查,明確用戶需求,保證開發(fā)的新系統(tǒng)的功能與用戶的要求相吻合,避免耗費大量的人力、物力、財力,新系統(tǒng)的開發(fā)卻失敗的悲劇發(fā)生。2.2可行性分析可行性分析是在用戶的要求和系統(tǒng)調(diào)研的基礎(chǔ)上進行的,對新系統(tǒng)的開發(fā)從社會、技術(shù)、經(jīng)濟、管理等方面進行分析,并得出新系統(tǒng)的開發(fā)工作可行、不可行、需要修改、追加投資、暫緩開發(fā)、分步實施等方案和結(jié)論,最后完成可行性分析??尚行苑治鲆话憧啥x為:可行性分析是在建設(shè)的前期對工程項目的一種考察和鑒定,對擬議中的項目進行全面與綜合的技術(shù)、經(jīng)濟能力的調(diào)查,判斷它是否可行??尚行苑治鲭A段的主要工作包括以下幾個方面:(1)新系統(tǒng)目標(biāo)可行性分析:分析新系統(tǒng)的目標(biāo)是否符合企業(yè)的現(xiàn)狀和發(fā)展的需要。(2)社會可行性分析:社會可行性分析主要是指管理信息系統(tǒng)的開發(fā)是否符合國家法律政策,是否,能夠與社會大系統(tǒng)實現(xiàn)良好的對接。(3)技術(shù)可行性分析:技術(shù)可行性分析是根據(jù)新系統(tǒng)的目標(biāo)來衡量是否具備所需要的技術(shù),包括系統(tǒng)開發(fā)人員數(shù)量和水平,硬件方面,軟件方面及其它應(yīng)用技術(shù)。

(4)經(jīng)濟可行性分析

經(jīng)濟可行性分析主要是對開發(fā)新系統(tǒng)所投入的資金與系統(tǒng)投入使用后所帶來的經(jīng)濟效益進行比較,確認(rèn)新系統(tǒng)是否會給企業(yè)帶來一定的經(jīng)濟效益。(5)管理可行性分析:管理可行性分析主要是分析企業(yè)現(xiàn)行的管理體制和企業(yè)領(lǐng)導(dǎo)是否具有現(xiàn)代化的管理意識和管理水平。2.3

技術(shù)可行性分析技術(shù)可行性分析主要包括四個方面:目前有關(guān)的技術(shù)能否支持所開發(fā)的新系統(tǒng);新系統(tǒng)開發(fā)人員的數(shù)量和水平,即人力資源;硬件和軟件資源。(1)技術(shù)支持:首先根據(jù)新系統(tǒng)的目標(biāo),考慮目前有關(guān)的技術(shù)能否支持所開發(fā)的新系統(tǒng)。這里討論的技術(shù)必須是已經(jīng)普遍使用的,而不是待研究的或正在研究的。對于本系統(tǒng),本人是采用C++編寫的。而在開發(fā)五子棋的過程運用到了,圖形的繪制(主要是對棋子的繪制,棋盤的繪制的)。還有C++種對聲音的播放方式(主要是用于下棋的時候的落子聲音,悔棋時的聲音,贏棋時的聲音,輸棋的聲音)。文件的保存和載入(主要用于對棋盤信息的儲存和打開)。(2)硬件資源:開發(fā)管理信息系統(tǒng)所需的硬件資源包含以下兩個方面:系統(tǒng)開發(fā)人員在管理信息系統(tǒng)的開發(fā)過程中所需要的計算機設(shè)備及其有關(guān)的外部設(shè)備;管理信息系統(tǒng)開發(fā)成功投入使用后,使用單位所應(yīng)具備的計算機設(shè)備及其有關(guān)的外圍設(shè)備。對硬件資源進行可行性分析時主要考慮計算機的主機內(nèi)存、類型、功能、聯(lián)網(wǎng)能力、安全保護措施以及輸入/輸出設(shè)備,外存儲器和聯(lián)網(wǎng)數(shù)據(jù)通信設(shè)備的配置、功能、效率等指標(biāo)是否符合系統(tǒng)方案設(shè)計要求,同時還要考慮計算機的性能/價格比。本系統(tǒng)對計算機的要求不高,一般的硬件配置都能運行此系統(tǒng)。3軟件架構(gòu)3.1棋盤類整個架構(gòu)的核心部分。封裝了棋盤的各種可能用到的功能,如初始化、判斷勝負(fù)等。用戶操作主界面,主界面與棋盤類進行交互來完成對游戲的操作。3.1.1主要成員變量(1)棋盤等待由于在玩家落子后需要等待對方落子,例如:黑子先下,白字就處于等待狀態(tài),這時白子是不能落子的。還有就是悔棋,直接發(fā)出悔棋信息就能悔棋了。(2)棋盤數(shù)據(jù)這是一個15*15的二位數(shù)組,用來保存當(dāng)前棋盤的落子數(shù)據(jù)。其中對于每個成員來說,0表示落黑子,1表示落白子,-1表示無子。(3)游戲模式指針這個游戲類的對象指針是可行類的核心內(nèi)容。它所指向的對象實體決定了可行在執(zhí)行一件事情時候的不同行為,具體的內(nèi)容請參見“游戲模式”一節(jié)。(4)網(wǎng)絡(luò)連接用來表示當(dāng)前網(wǎng)絡(luò)連接的情況,在網(wǎng)絡(luò)對弈游戲模式下客戶端連接服務(wù)器的時候用來判斷是否連接成功;事實上,它也是區(qū)分當(dāng)前游戲模式的唯一標(biāo)志。3.2主要成員函數(shù)說明3.2.1清空棋盤在每一局游戲開始的時候都需要調(diào)用這個函數(shù)將棋盤清空,也就是棋盤的初始化工作。在這個函數(shù)中,主要發(fā)生了這么幾件事情:(1)將數(shù)據(jù)中的每一個落子位置為無子狀態(tài)(-1)。(2)按照傳入的參數(shù)設(shè)置棋盤等待標(biāo)志wait,以供先、后手的不同情況之用。(3)使用delete將came的指針?biāo)赶虻脑杏螒蚰J綄ο髲亩焉蟿h除。3.2.2繪制棋子這無疑是很重要的一個函數(shù),它根據(jù)參數(shù)給定的坐標(biāo)和顏色繪制棋子。繪制的詳細(xì)過程如下:(1)將給定的棋盤坐標(biāo)換算為繪圖的像素坐標(biāo)。(2)根據(jù)坐標(biāo)繪制棋子位圖。(3)如果先前曾下過棋子,則將上一個繪制棋子上的最后落子指示矩形擦除。(4)在剛繪制完成的棋子四周繪制最后落子指示矩形。3.2.3左鍵消息作為棋盤唯一響應(yīng)的左鍵消息,也需要做工作:(1)如果棋盤等待標(biāo)志wait為true,則直接發(fā)出警告聲音并返回,即禁止落子。(2)如果點擊時的鼠標(biāo)坐標(biāo)在合法坐標(biāo)(0,

0)~(14,

14)之外,亦禁止落子。(3)如果走的步數(shù)大于1步,方才允許悔棋。(4)進行勝利判斷,如勝利則修改UI狀態(tài)并增加勝利數(shù)的統(tǒng)計。(5)如未勝利,則向?qū)Ψ桨l(fā)送已經(jīng)落子的消息。(6)落子完畢,將Wait標(biāo)志置為TRUE,開始等待對方回應(yīng)。3.2.4繪制棋盤每當(dāng)圖像消息觸發(fā)時,都需要對棋盤進行重繪。在圖像上作為響應(yīng)繪制消息的消息處理函數(shù)使用了雙緩沖技術(shù),減少了多次繪圖可能導(dǎo)致的圖像閃爍問題。這個函數(shù)主要完成了以下工作:(1)裝載棋盤位圖并進行繪制。(2)根據(jù)棋盤數(shù)據(jù)繪制棋子。(3)繪制最后落子指示矩形。3.2.5對方落子完畢在對方落子之后,仍然需要做一些判斷工作,這些工作與左鍵消息中的類似,在此不再贅述。3.2.6勝負(fù)的判斷這是游戲中一個極其重要的算法,用來判斷當(dāng)前棋盤的形勢是哪一方獲勝。3.3游戲模式類這個類負(fù)責(zé)對游戲模式進行管理,以及在不同的游戲模式下對不同的用戶行為進行不同的響應(yīng)。由于并不需要CGame本身進行響應(yīng),所以將其設(shè)計為了一個純虛類。3.3.1主要成員變量(1)棋盤指針由于在游戲中需要對棋盤以及棋盤的父窗口——主對話框進行操作及UI狀態(tài)設(shè)置,故為CGame類設(shè)置了這個成員。(2)落子步驟一個好的棋類程序必須要考慮到的功能就是它的悔棋功能,所以需要為游戲類設(shè)置一個落子步驟的列表。由于人機對弈和網(wǎng)絡(luò)對弈中都需要這個功能,故將這個成員直接設(shè)置到基類CGame中。3.3.2主要成員函數(shù)(1)悔棋操作在不同的游戲模式下,悔棋的行為是不一樣的。人機對弈模式下,計算機是完全允許玩家悔棋的,但是出于對程序負(fù)荷的考慮,只允許玩家悔棋當(dāng)前的兩步棋(計算機一步,玩家一步)。雙人對弈模式下,悔棋的過程為:首先由玩家向?qū)Ψ秸f出悔棋請求(悔棋消息),然后由對方?jīng)Q定是否允許玩家悔棋,在玩家得到對方的響應(yīng)消息(允許或者拒絕)之后,才進行悔棋與否的操作。(2)初始化操作對于不同的游戲模式而言,也就有不同的初始化方式。對于人機對弈模式而言,初始化操作包括以下幾個步驟:設(shè)置主界面計算機玩家的姓名;初始化所有的獲勝組合;如果是計算機先走,則占據(jù)天元(棋盤正中央)的位置。發(fā)送落子消息在玩家落子結(jié)束后,要向?qū)Ψ桨l(fā)送自己落子的消息。對于不同的游戲模式,發(fā)送的目標(biāo)也不同:對于人機對弈游戲模式,將直接把落子的信息(坐標(biāo)、顏色)發(fā)送給相應(yīng)的計算函數(shù);對于雙人對弈游戲模式,將把落子消息發(fā)送給套接字,并由套接字轉(zhuǎn)發(fā)給對方。(4)勝利后的處理這個成員函數(shù)主要針對雙人對弈模式。在玩家贏得棋局后,這個函數(shù)仍然會調(diào)用將玩家所下的制勝落子步驟發(fā)送給對方玩家,然后由游戲端來判定自己失敗。3.4資源編輯由于我們這個程序出現(xiàn)的關(guān)于資源編輯的內(nèi)容太多,我們具體介紹如下:見下圖3-1和圖3-2,我們需要添加的有:圖3-1圖3-1黑子圖3-2圖3-2白子說明:

由于下棋時我們必須把鼠標(biāo)熱點設(shè)置在中間,點擊下圖(圖3-3)最右邊按扭,然后把鼠標(biāo)移動到圖像中你想設(shè)置為熱點的地方,按下鼠標(biāo)左鍵。圖3-3圖3-3熱點說明:

由于我們的圖標(biāo)支持256色,按下下圖(圖3-4)最右邊按扭,選擇Device里面顯示的選項。圖3-4圖3-4黑子像素說明:

工具欄一般都是根據(jù)菜單選項而產(chǎn)生的,它的ID一般都能從菜單的ID中找到。3.5消息說明網(wǎng)絡(luò)間傳遞的消息,都遵循以下一個結(jié)構(gòu)體的形式:我們這用SY來表示消息的id??v軸用x,橫軸用y,x、y表示落子的坐標(biāo)。Color表示落子的顏色。SSY隨著SY的不同而不同。3.5.1落子消息表明對方落下了一個棋子,其中x、y和color成員有效SSY成員無效。在人機對弈游戲模式下,亦會模擬發(fā)送此消息以達到程序模塊一般化的效果。3.5.2聲音消息你可以選著你想要的,有聲或者無聲。建議有聲,因為有聲音將會提示,如果你快輸時,會發(fā)出一個響聲的。而且有聲音更加的增加了游戲的樂趣。3.5.3提示消息當(dāng)你想不到你下一步下那個位置的時候,你可以選擇提示選項,它將會為你提示出下一步該如何去落子。3.5.4悔棋消息表示你想悔棋,那么你就直接發(fā)出消息,直接悔棋一步,而不能悔棋兩步,還有就是,重新下了第二步后,可以重新悔棋,不過還是只能悔棋一步。3.5.5輸贏消息你贏了,就是顯示你贏,而你輸,就顯示你輸了。其中,還有你共下了多少步而輸或贏了對手,反之一樣。當(dāng)然也提供了,悔棋多少步的信息出來。還有你的評語消息。3.5.6再次開局消息表示你想再開一局,那你就直接發(fā)出消息,然后再開一局。當(dāng)然,你可以選著人機對戰(zhàn)或者雙人對戰(zhàn)。當(dāng)你選著人機對戰(zhàn)時,你還可以選著你想要的機器的智能,你選著的級別越高,智能也就越高。4主要算法五子棋游戲中,有相當(dāng)?shù)钠撬惴ǖ牟糠?。無論是人機對弈,還是網(wǎng)絡(luò)對弈,都需要合理算法的支持,本節(jié)中將詳細(xì)介紹五子棋中使用的算法。4.1判斷勝負(fù)五子棋的勝負(fù),在于判斷棋盤上是否有一個點,從這個點開始的右、下、右下、左下四個方向是否有連續(xù)的五個同色棋子出現(xiàn),如圖4-1所示。圖4-1判斷勝負(fù)方向這個算法也就是CTable的Win成員函數(shù)。從設(shè)計的思想上,需要它接受一個棋子顏色的參數(shù),然后返回一個布爾值,這個值來指示是否勝利。流程圖如下圖4-2:開始黑子下子開始黑子下子白子下子是否有五子相連白子下子是否有五子相連結(jié)束是否否圖4-2判斷勝負(fù)流程圖由于這個算法所遵循的搜索順序是從左到右、自上而下,因此在每次循環(huán)的時候,都有一些坐標(biāo)無需納入考慮范圍。例如對于橫向判斷而言,由于右邊界所限,因而所有橫坐標(biāo)大于等于11的點,都構(gòu)不成達到五子連的條件,所以橫坐標(biāo)的循環(huán)上界也就定為11,這樣也就提高了搜索的速度。4.2人機對弈算法人機對弈算法完全按照CGame基類定義的接口標(biāo)準(zhǔn),封裝在了COneGame派生類之中。下面將對這個算法進行詳細(xì)地介紹。4.2.1獲勝組合獲勝組合是一個三維數(shù)組,它記錄了所有取勝的情況。也就是說,參考于CTable::Win中的情況,對于每一個落子坐標(biāo),獲勝的組合一共有

15

*

11

*

2

+

11

*

11

*

2

=

572種。

而對于每個坐標(biāo)的獲勝組合,應(yīng)該設(shè)置一個[15][15][572]大小的三維數(shù)組。

在擁有了這些獲勝組合之后,就可以參照每個坐標(biāo)的572種組合給自己的局面和玩家的局面進行打分,也就是根據(jù)當(dāng)前盤面中某一方所擁有的獲勝組合多少進行權(quán)值的估算,給出最有利于自己的一步落子坐標(biāo)。

由于是雙方對弈,所以游戲的雙方都需要一份獲勝組合,也就是:電腦獲勝組玩家獲勝組合

在每次游戲初始化的時候,需要將每個坐標(biāo)下可能的獲勝組合都置為true。

在初始化的時候,將每個棋子數(shù)置為0。4.2.2落子后處理每當(dāng)一方落子后,都需要作如下處理:

如果己方此坐標(biāo)的獲勝組合仍為true,且仍有可能在此獲勝組合處添加棋子,則將此獲勝組合添加棋子數(shù)加1;如果對方此坐標(biāo)的獲勝組合仍為true,則將對方此坐標(biāo)的獲勝組合置為false,并將對方此獲勝組合添加棋子數(shù)置為-1(不可能靠此組合獲勝)。4.2.3查找棋盤空位在計算機落子之前,需要查找棋盤的空位,所以需要一個SearchBlank成員函數(shù)完成此項工作,此函數(shù)需要進行不重復(fù)的查找,也就是說,對已查找過的空位進行標(biāo)記,并返回找到空位的坐標(biāo)。4.2.4落子打分找到空位后,需要對這個點的落子進行打分,這個分?jǐn)?shù)也就是這個坐標(biāo)重要性的體現(xiàn)??紤]到攻守兩方面的需要,所以將玩家落子給的分?jǐn)?shù)置為負(fù)值。4.2.5防守策略落子的考慮不單單要從進攻考慮,還要從防守考慮。這一細(xì)節(jié)的實現(xiàn)其實就是讓計算機從玩家棋盤布局分析戰(zhàn)況,然后找出對玩家最有利的落子位置。4.2.6選取最佳落子它的實現(xiàn)原理是:在四個方向上,各自計算那個方向上棋子的狀態(tài),我們的思路是利用原來定義的白棋為1,黑棋為-1,的思想,讓同個方向上的五個棋子的值相加,取絕對值并賦值給為這個方向定義的局部變量。

為什么要用五個棋子的值相加呢?因為,如果幾個棋子是同色的,無論黑白,它的絕對值必然大,而對于幾個棋子中有黑棋和白棋的,其值必然相加而抵消變小。所以我們可以利用這種方法來尋找旁邊有多個同色棋子的空位置。

在每一個棋盤位置,計算以它為起點的四個方向(上、下、右下、左下),再比較這四個方向中哪個值最大,然后在這個方向上尋找落棋點。5軟件實現(xiàn)5.1游戲運行(1)游戲開始自主選擇是人機對戰(zhàn)亦或是人人對戰(zhàn),還有先手問題,你先或是計算機先,音效是開活關(guān)。如下圖5-1所示圖5-1五子棋開始界面(2)游戲界面如下圖5-2所示為于計算機對弈,你先下圖5-2五子棋界面(3)游戲的工具欄-上有所需要的選項游戲難度選擇可在游戲【G】上選擇,新開局,英雄榜等等選項。如下圖5-3所示。圖5-3五子棋游戲工具欄(4)悔棋在選項上可以選擇悔棋選項如下圖5-4。圖5-4選項(5)游戲結(jié)束例如下圖5-5所示圖5-5游戲結(jié)束界面6補充說明考慮到程序的響應(yīng)速度,人機對弈算法只對玩家的棋子進行了一步的推測。由于計算機在落子時選取的是得分最高的一步落子,所以如果玩家在開局的時候不改變落子步驟,那么將會獲得從頭至尾相同的棋局。對于人機對弈的悔棋處理,由于這個算法的開銷相當(dāng)大,每一步落子都會存在不同的棋盤布局,所以實現(xiàn)從頭到尾的悔棋不是很現(xiàn)實(將會存在過多的空間保存棋盤布局),因而在人機對弈模式下,只允許玩家悔最近的兩步落子。7結(jié)論考慮到程序的響應(yīng)速度,人機對弈算法只對玩家的棋子進行了一步的推測。

由于計算機在落子時選取的是得分最高的一步落子,所以如果玩家在開局的時候不改變落子步驟,那么將會獲得從頭至尾相同的棋局。

考慮到下棋同時還要聊天,所以并未對落子時間加入任何限制,同樣如果玩家離開游戲也不會判負(fù)。

對于人機對弈

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論