版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于VC的五子棋游戲軟件的設(shè)計(jì)與開(kāi)發(fā)</p><p><b> 摘 要</b></p><p> 人工智能是近年來(lái)很活躍的研究領(lǐng)域之一,計(jì)算機(jī)博弈是人工智能研究的一個(gè)重要分支,它的研究為人工智能帶來(lái)了很多重要的方法和理論,產(chǎn)生了廣泛的社會(huì)影響和學(xué)術(shù)影響。五子棋本身就是一款益智休閑游戲,規(guī)則簡(jiǎn)單。五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲
2、理,有助于修身養(yǎng)性。</p><p> 本系統(tǒng)就以五子棋游戲作為研究課題,對(duì)五子棋的算法與規(guī)則做了研究,闡述了如何在 Microsoft Visual C++ 下用 API 函數(shù)來(lái)開(kāi)發(fā)Windows下的游戲并給出了具體的實(shí)現(xiàn)。本系統(tǒng)以五子棋為例實(shí)現(xiàn)的主要功能有棋盤(pán)、棋子的輸出、人機(jī)對(duì)下等。本系統(tǒng)還有和棋、再來(lái)一盤(pán)、幫助等輔助功能。</p><p> 關(guān)鍵字:五子棋;Microsoft
3、Visual C++; API函數(shù)</p><p> The Design and Exploitation of Gobang Game with VC</p><p><b> Abstract</b></p><p> Artificial intelligence is one of the brisk research area
4、s. The chess game on computer is an important branch of the research on artificial intelligence. The researches on chess game bring plenty of important methods and theories for researching on artificial intelligence, and
5、 cause broad influences on society and academe. Gobang chess game means five pieces on one line, is a sort of game, which is full of wisdom, leisure and benefits, and the rules of it are very simple. </p><p>
6、; This paper focuses on the study of this chess game, and uses the Microsoft Visual C++ to explore the Window’s game. This system mainly uses the function of Visual C++/API to realize the export of chessboard and checke
7、r, and people can play with computer. Moreover, this system has the assistant functions such as “Deuce”、“ Play Again”、“ Help” and so on.</p><p> Key words: Gobang; Microsoft Visual C++; API Function</p&
8、gt;<p><b> 目 錄</b></p><p><b> 論文總頁(yè)數(shù):21頁(yè)</b></p><p><b> 1引言1</b></p><p> 2開(kāi)發(fā)工具和應(yīng)用平臺(tái)1</p><p> 2.1Microsoft Visual C+
9、+ 的介紹1</p><p> 2.2Windows 編程的特點(diǎn)2</p><p> 3系統(tǒng)需求分析4</p><p> 3.1系統(tǒng)需求4</p><p> 3.2功能需求4</p><p> 3.3系統(tǒng)運(yùn)行環(huán)境4</p><p> 4五子棋算法分析5<
10、;/p><p> 4.1五子棋的發(fā)展5</p><p> 4.2五子棋的規(guī)則6</p><p> 4.3具體算法分析7</p><p> 4.3.1 棋盤(pán)局勢(shì)狀態(tài)表示7</p><p> 4.3.2棋盤(pán)中下棋的順序表示7</p><p> 4.3.3具體算法7</
11、p><p><b> 5系統(tǒng)流程9</b></p><p> 6系統(tǒng)功能實(shí)現(xiàn)10</p><p> 6.1窗口設(shè)計(jì)10</p><p> 6.2棋盤(pán)設(shè)計(jì)11</p><p> 6.3按鈕功能的實(shí)現(xiàn)12</p><p> 6.4勝負(fù)判斷13&l
12、t;/p><p> 7系統(tǒng)測(cè)試與分析14</p><p> 7.1運(yùn)行結(jié)果14</p><p> 7.2問(wèn)題的發(fā)現(xiàn)與解決17</p><p><b> 結(jié) 論17</b></p><p><b> 參考文獻(xiàn)17</b></p><
13、;p><b> 致 謝19</b></p><p><b> 聲 明20</b></p><p><b> 附 錄21</b></p><p><b> 引言</b></p><p> 目前網(wǎng)絡(luò)上有很多五子棋子游戲,
14、玩法簡(jiǎn)單,娛樂(lè)性也很高。五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。通過(guò)對(duì)五子棋的設(shè)計(jì)與開(kāi)發(fā),了解和掌握游戲開(kāi)發(fā)的原理與方法。讓電腦像人腦一樣思考,一直是人工智能發(fā)展的最終目標(biāo)。作為一門(mén)邊緣學(xué)科,它有諸多的研究領(lǐng)域,博弈即為其中之一。博弈的參加者可以是個(gè)人、集體、某種生物或機(jī)器,他們都力圖用自己的“智力”去擊敗對(duì)手。博弈為人工智能提供了一個(gè)極好的試驗(yàn)場(chǎng)所,人工智能中的許多概念和方法都是從博弈程序中提煉出來(lái)的,人工智
15、能中大多以下棋為例來(lái)研究博弈規(guī)律。本文以五子棋為入口,設(shè)計(jì)了一個(gè)五子棋人機(jī)對(duì)弈系統(tǒng),以實(shí)現(xiàn)人和計(jì)算機(jī)的博弈,最終的目的是為了建立一個(gè)有具體規(guī)則的五子棋平臺(tái)。</p><p> 人機(jī)對(duì)弈程序的要點(diǎn),至少應(yīng)具備以下4個(gè)部分:(1) 狀態(tài)表示:某種在機(jī)器中表示棋局的方法,能夠讓程序知道博弈的狀態(tài)。(2) 走法產(chǎn)生:產(chǎn)生合法走法的規(guī)則,以使博弈公正地進(jìn)行,并可判斷對(duì)手是否亂走。(3)搜索技術(shù):從所有合法的走法中選擇最佳
16、的走法技術(shù)。(4) 對(duì)弈界面。</p><p> 本系統(tǒng)主要研究使用 Microsoft Visual C++ 以 Windows 窗體程序?qū)ξ遄悠逵螒蜻M(jìn)行開(kāi)發(fā)與設(shè)計(jì),讓大家了解用 Microsoft Visual C++ 開(kāi)發(fā)WINDOWS 小游戲的過(guò)程。</p><p><b> 開(kāi)發(fā)工具和應(yīng)用平臺(tái)</b></p><p> Micr
17、osoft Visual C++ 的介紹</p><p> C 語(yǔ)言是一種高效率的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,而 Visual C++ 則是在它的基礎(chǔ)上開(kāi)發(fā)出的一套功能強(qiáng)大的程序設(shè)計(jì)工具。對(duì)于游戲程序,Visual C++ 可以說(shuō)是最佳的開(kāi)發(fā)工具。第一, Visual C++ 具有優(yōu)異的運(yùn)行速度。第二, Visual C++ 可以直接訪問(wèn)內(nèi)存。</p><p> Visual C++ 自誕生以
18、來(lái),一直是Windows環(huán)境下最主要的應(yīng)用開(kāi)發(fā)系統(tǒng)之一。Visual C++ 不僅是C++ 語(yǔ)言的集成開(kāi)發(fā)環(huán)境,而且與 Win32 緊密相連,所以,利用Visual C++ 開(kāi)發(fā)系統(tǒng)可以完成各種各樣的應(yīng)用程序的開(kāi)發(fā),從底層軟件直到上層直接面向用戶的軟件。而且,Visual C++ 強(qiáng)大的調(diào)試功能也為大型復(fù)雜軟件的開(kāi)發(fā)提供了有效的排錯(cuò)手段。</p><p> Visual C++ 是一個(gè)很好的可視化編程工具,使用
19、 Visual C++ 環(huán)境來(lái)開(kāi)發(fā)基于 Windows 的應(yīng)用程序大大縮短了開(kāi)發(fā)時(shí)間,而且它的界面更友好,便于程序員操作。開(kāi)發(fā)環(huán)境是程序員同 Visual C++ 的交互界面,通過(guò)它程序員可以訪問(wèn) C++ 源代碼編輯器、資源編輯器,使用內(nèi)部調(diào)試器,還可以創(chuàng)建項(xiàng)目文件。</p><p> 所謂 API 就是應(yīng)用程序編程接口(Application Programming Interface), Windows A
20、PI 是Windows 系統(tǒng)和Windows 應(yīng)用程序間的標(biāo)準(zhǔn)程序接口。API 為應(yīng)用程序提供系統(tǒng)的各種特殊函數(shù)及數(shù)據(jù)結(jié)構(gòu)定義,Windows 應(yīng)用程序可以利用上千個(gè)標(biāo)準(zhǔn) API 函數(shù)調(diào)用系統(tǒng)功能。在 Visual C++中使用 Windows API 是相當(dāng)容易的, 只要在項(xiàng)目中設(shè)定所要使用的函數(shù)庫(kù)并引用正確的頭文件,就可以使用 Windows API 中的函數(shù)與數(shù)據(jù)類型。</p><p> 根據(jù)Window
21、s API 函數(shù)完成的功能,可將其分為三類。</p><p> (1)窗口管理函數(shù):實(shí)現(xiàn)窗口函數(shù)的創(chuàng)建、移動(dòng)和修改功能。</p><p> ?。?)圖形設(shè)備函數(shù)(GDI):實(shí)現(xiàn)與設(shè)備無(wú)關(guān)的圖形操作功能。</p><p> (3)系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)與操作系統(tǒng)有關(guān)的多種功能。</p><p> 用 Windows API 函數(shù)來(lái)編寫(xiě)應(yīng)用程序
22、的順序結(jié)構(gòu)為:調(diào)用 WinMain 函數(shù)開(kāi)始執(zhí)行→定義窗口類→初始化窗口類→窗口的實(shí)例化→通過(guò)消息循環(huán)獲取消息并將消息發(fā)送給消息處理函數(shù)做出相應(yīng)的操作。</p><p> Windows 編程的特點(diǎn)</p><p> 所有的 Windows 程序都具有類似的結(jié)構(gòu)和相同的“外觀”,所以用戶不用花很多的時(shí)間來(lái)學(xué)習(xí)新程序的用法。具有這種一致的用戶界面是使用 Windows 內(nèi)部子模序來(lái)創(chuàng)建的
23、。所有的菜單、對(duì)話框、滾動(dòng)條等都具有同樣的鍵盤(pán)的鼠標(biāo)接口,Windows 自己處理這項(xiàng)工作,而不是交給應(yīng)用程序完成。Windows 編程有以下幾個(gè)特點(diǎn):</p><p> ?。?)事件驅(qū)動(dòng)的程序設(shè)計(jì) </p><p> (2)消息循環(huán)與輸入 </p><p><b> ?。?)圖形輸出 </b></p><p> (
24、4)用戶界面對(duì)象 </p><p><b> (5)資源共享</b></p><p> 編寫(xiě)一個(gè)典型的Windows應(yīng)用程序,一般需要:</p><p> (1)C, CPP源程序文件</p><p> ?。?)H,HPP頭文件 </p><p><b> ?。?)資源文
25、件</b></p><p> 包含了應(yīng)用程序所使用的全部資源定義,通常以 .RC 為后綴名。資源是應(yīng)用程序所能夠使用的一類預(yù)定義工具中的一個(gè)對(duì)象,包括:字符串資源、加速鍵表、對(duì)話框、菜單、位圖、光標(biāo)、工具條、圖標(biāo)、版本信息和用戶自定義資源等。</p><p> Windows 消息機(jī)制:Windows 是一個(gè)消息驅(qū)動(dòng)的操作系統(tǒng)。一個(gè)消息由一個(gè)消息名稱(U
26、INT 類型)和兩個(gè)參數(shù)(WPARAM,LPARAM)構(gòu)成。當(dāng)用戶進(jìn)行了輸入或者是窗口的狀態(tài)發(fā)生改變時(shí),系統(tǒng)會(huì)發(fā)送消息到某一個(gè)窗口。例如,當(dāng)鼠標(biāo)左鍵單擊之后會(huì)有 WM_LBUTTONDOWN 消息發(fā)送。用戶也可以定義自己的消息名稱,也可以利用自定義消息來(lái)發(fā)送通知和傳送數(shù)據(jù)。一個(gè)消息必須由一個(gè)窗口接收。在窗口的消息處理函數(shù)中可以對(duì)消息進(jìn)行分析,對(duì)自己感興趣的消息進(jìn)行處理。如果希望在窗口中進(jìn)行圖形輸出就必須對(duì) WM_PAINT 進(jìn)行處理。為
27、了應(yīng)付那些沒(méi)有被響應(yīng)的消息,Windows 為窗口編寫(xiě)了默認(rèn)的窗口消息處理函數(shù),窗口過(guò)程將負(fù)責(zé)處理那些程序中沒(méi)有處理的消息。正因?yàn)橛辛诉@個(gè)默認(rèn)窗口過(guò)程,程序員才可以利用 Windows 的窗口進(jìn)行開(kāi)發(fā)而不必過(guò)多關(guān)注窗口各種消息的處理。提到消息就必須說(shuō)到窗口句柄,系統(tǒng)通過(guò)窗口句柄在整個(gè)操作系統(tǒng)中唯一標(biāo)識(shí)一個(gè)窗口。發(fā)送消息時(shí)必須指定一個(gè)窗口句柄表明該消息由那個(gè)窗口接收。而每個(gè)窗口都會(huì)有自己的窗口消息處理函數(shù),用戶的輸入會(huì)被正確的處理。在 W
28、indows 操作系統(tǒng)中維</p><p> 窗口函數(shù)定義了應(yīng)用程序?qū)邮盏降牟煌⒌捻憫?yīng),其中包括了應(yīng)用程序?qū)Ω鞣N可能接收到的消息的處理過(guò)程,是消息處理分支控制語(yǔ)句的集合。通常窗口函數(shù)由一個(gè)或多個(gè) switch 語(yǔ)句組成。每條 case 語(yǔ)句對(duì)應(yīng)一種消息,當(dāng)應(yīng)用程序接收到一個(gè)消息時(shí),相應(yīng)的 case 語(yǔ)句被激活并執(zhí)行相應(yīng)的響應(yīng)程序模塊。</p><p> 窗口函數(shù)是應(yīng)用程序處理接收
29、到的消息的函數(shù)。其中包含了應(yīng)用程序?qū)Ω鞣N可能接收到的消息的處理過(guò)程。</p><p> 在本系統(tǒng)中一共用到了 WM_PAINT、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_DESTROY四種消息:</p><p> LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)<
30、/p><p> switch(iMessage) </p><p><b> {</b></p><p> case WM_PAINT:</p><p><b> …… ……</b></p><p><b> break;</b>&
31、lt;/p><p> case WM_LBUTTONDOWN:</p><p><b> …… ……</b></p><p> case 、WM_LBUTTONUP:</p><p><b> …… ……</b></p><p> case WM_DESTROY:<
32、;/p><p><b> …… ……</b></p><p> default:</p><p> return(DefWindowProc(hWnd,iMessage,wParam,lParam));</p><p><b> }</b></p><p>
33、WM_LBUTTONDOWN 是在玩家在鼠標(biāo)單擊左鍵后產(chǎn)生的,這時(shí)通過(guò) GetCursorPos(&pt) 函數(shù)來(lái)判斷鼠標(biāo)是否處在落棋的合法點(diǎn)(包括按鈕上),如果是合法的落棋點(diǎn),就返回棋子狀態(tài)數(shù)據(jù)等參數(shù),這時(shí) WM_PAINT 函數(shù)在收到這些消息后就開(kāi)始按照得到的參數(shù)來(lái)重繪棋盤(pán),用戶在松開(kāi)鼠標(biāo)后又產(chǎn)生 WM_LBUTTONUP 消息,電腦在通過(guò)選擇最佳落棋點(diǎn)之后,又返回給 WM_PAINT,這樣就產(chǎn)生了消息循環(huán),直到接收到 WM
34、_QUIT 消息才退出程序, PostQuitMessage 函數(shù)的作用就是向應(yīng)用程序發(fā)出 WM_QUIT 消息,請(qǐng)求退出。DefWindowProc 函數(shù)是系統(tǒng)默認(rèn)的處理過(guò)程,以保證所有發(fā)送到該窗口的消息均得以處理。</p><p><b> 系統(tǒng)需求分析</b></p><p><b> 系統(tǒng)需求</b></p><p
35、> 五子棋作為一款休閑益智游戲,它最大的優(yōu)點(diǎn)在于游戲規(guī)則家喻戶曉,簡(jiǎn)單,上手快,趣味性強(qiáng),所以受廣大用戶青睞,在各大提供棋牌類游戲的平臺(tái)都可以看到玩五子棋游戲的人很多。休閑益智游戲中等級(jí)并不是最重要的追求目標(biāo),通過(guò)對(duì)游戲規(guī)則的熟悉,能很快上手掌握其操作方式,也更適合男女老幼全家共同娛樂(lè),花費(fèi)時(shí)間簡(jiǎn)短,速戰(zhàn)速?zèng)Q,在短時(shí)間內(nèi)感受到游戲的樂(lè)趣,完全享受氣氛輕松活躍的游戲過(guò)程。此種娛樂(lè)方式既不耽誤時(shí)間也能輕松調(diào)劑娛樂(lè),充分適合現(xiàn)代人們的
36、娛樂(lè)需求。更主要的是開(kāi)發(fā)了人的智力,成為年輕一代最流行的游戲,據(jù)統(tǒng)計(jì),五子棋游戲的玩家中,學(xué)生占了接近三分之一的比例,對(duì)學(xué)生的智力健康成長(zhǎng)起一定作用,正所謂休閑娛樂(lè)兩不誤。</p><p><b> 功能需求</b></p><p> 要求系統(tǒng)界面簡(jiǎn)潔,操作方便,把五子棋游戲規(guī)則中最基本的規(guī)則體現(xiàn)出來(lái),比如“和棋”、“重新開(kāi)局”等。五子棋還有一大特點(diǎn)就是速戰(zhàn)速?zèng)Q,
37、電腦應(yīng)在很短時(shí)間內(nèi)就應(yīng)做出判斷,并能提供一定的幫助,違反游戲規(guī)則的時(shí)候應(yīng)立即指出。在正規(guī)五子棋比賽中,都設(shè)置了“禁手”這一規(guī)則,但廣大玩家之所以喜愛(ài)五子棋游戲,就是因?yàn)槲遄悠逵螒蛞?guī)則簡(jiǎn)單,“禁手”這一規(guī)則很復(fù)雜,所以在本系統(tǒng)中,采用“無(wú)禁手”的規(guī)則,讓規(guī)則簡(jiǎn)單化。</p><p><b> 系統(tǒng)運(yùn)行環(huán)境 </b></p><p> Win 9X/Win ME/Wi
38、n NT/Win 2000/Win XP/Win 2003/</p><p><b> 五子棋算法分析</b></p><p><b> 五子棋的發(fā)展</b></p><p> 五子棋是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Fiv
39、e in a Row的縮寫(xiě)),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。 </p><p> 五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂(lè)見(jiàn),又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。</p
40、><p> 五子棋起源于古代中國(guó),發(fā)展于日本,風(fēng)靡于歐洲。對(duì)于它與圍棋的關(guān)系有兩種說(shuō)法,一說(shuō)早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說(shuō)源于圍棋,是圍棋發(fā)展的一個(gè)分支。在中國(guó)的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國(guó)南北朝時(shí)先后傳入朝鮮、日本等地。據(jù)日本史料文獻(xiàn)介紹,中國(guó)古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1704年的日本元祿時(shí)代傳到日本
41、的。到日本明治32年(公元1899年),經(jīng)過(guò)公開(kāi)征名,“連珠”這一名稱才被正式確定下來(lái),取意于“日月如合壁,五星如連珠”。從此,連珠活動(dòng)經(jīng)過(guò)了不斷的改良,主要是規(guī)則的變化(即對(duì)執(zhí)黑棋一方的限制),例如,1899年規(guī)定,禁止黑白雙方走“雙三”;1903年規(guī)定,只禁止黑方走“雙三”;1912年規(guī)定,黑方被迫走“雙三”亦算輸;1916年規(guī)定,黑方不許走“長(zhǎng)連”;1918年規(guī)定,黑方不許走“四、三、三”;1931年規(guī)定,黑方不許走“雙四”,并規(guī)
42、定將19×19的圍棋盤(pán)改為15×15的連珠專用棋盤(pán)。本世紀(jì)初五子棋傳入歐洲并迅速風(fēng)靡全歐。通過(guò)一系列的變化,使五子棋這一簡(jiǎn)單的游戲復(fù)雜化、規(guī)范化,而最終成</p><p> 簡(jiǎn)單介紹一下文章中會(huì)遇到的一些關(guān)于五子棋最基本的術(shù)語(yǔ)</p><p> (1)先手:進(jìn)攻的著法,也指對(duì)弈雙方執(zhí)黑棋先在棋盤(pán)上落子的一方;</p><p> (2)四三:
43、指同時(shí)具備兩個(gè)先手,其中一個(gè)四,另一個(gè)是活三;</p><p> ?。?)活三(包括連三和跳三):①連三:緊緊相連的同色三子②跳三:中間間隔一子的活三 ;</p><p> ?。?)四四:一子落下同時(shí)形成兩個(gè)“四”的棋形 ;</p><p> ?。?)三三:一子落下形成了兩個(gè)活三的棋形;</p><p> ?。?)長(zhǎng)連:相
44、同顏色的連續(xù)六子或六子以上; </p><p> (7)禁手:對(duì)局中禁止使用的戰(zhàn)術(shù)或被判為負(fù)的行棋手段;</p><p> ?。?)勝局:對(duì)局的一方獲勝,稱為“勝局”。包括:①一方首先在棋盤(pán)的直線或橫線或斜線上形成連續(xù)的五子或五子以上(特指白方)。②對(duì)方表示認(rèn)輸。③對(duì)方超過(guò)比賽規(guī)定的時(shí)限。④當(dāng)黑方禁手形成未能同時(shí)形成五連,白方立即指出禁手后,判定為白方勝局。⑤對(duì)方遲到超過(guò)容許時(shí)
45、間。⑥對(duì)方嚴(yán)重犯規(guī)而被判負(fù); </p><p> ?。?)和棋:不分勝負(fù)的對(duì)局或雙方同意平局。</p><p><b> 五子棋的規(guī)則</b></p><p> 五子棋游戲的一個(gè)特點(diǎn)是先行的一方優(yōu)勢(shì)很大,因此在職業(yè)比賽中對(duì)黑方做了種種限制,以利公平競(jìng)爭(zhēng)。五子棋的比賽規(guī)則如下:</p><p> ?。?)黑棋
46、先手、白棋后手,從天元開(kāi)始相互順序落子;</p><p> ?。?)最先在棋盤(pán)橫向、縱向或斜向形成連續(xù)的同色五個(gè)棋子的一方為勝;</p><p> ?。?)黑棋禁手判負(fù)、白棋無(wú)禁手。黑棋禁手有“三、三”、“四、四”和“長(zhǎng)連”,包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取勝;</p><p> (4)如分不出勝負(fù),則到為平局;</p>&
47、lt;p> ?。?)五連與禁手同時(shí)形成,判勝;</p><p> (6)黑方禁手形成時(shí),白方應(yīng)立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指出,反而繼續(xù)落子,則禁手失效,不再判黑方負(fù)。 </p><p> 五子棋是黑白雙方或兩個(gè)人之間的競(jìng)技活動(dòng),由于對(duì)黑白雙方規(guī)則不同,黑棋必須先行。一般采用猜先的方法來(lái)決定誰(shuí)執(zhí)黑先行,即雙方各抓一種顏色的幾枚棋子,大數(shù)減小數(shù),單數(shù)雙方交換,偶數(shù)不換;黑方
48、在落下關(guān)鍵的第五子即形成五連的同時(shí),如又形成禁手,此時(shí)因黑方已經(jīng)成五,而“五”在五子棋中是至高無(wú)上的,故禁手失效,黑方勝;所謂黑方形成禁手,是指黑方落下一子同時(shí)形成兩個(gè)或兩個(gè)以上的活三、沖四及長(zhǎng)連等。此時(shí)白方應(yīng)立即指出,自然而勝。 </p><p> 專業(yè)連珠五子棋雖然對(duì)黑棋采取了種種限制,但是黑棋先行的優(yōu)勢(shì)依然很大。因此,在高段位的專業(yè)比賽中,又出現(xiàn)了三種特殊的規(guī)定: </p><p>
49、; ?。?)“指定打法”:指比賽雙方按照約定好的開(kāi)局進(jìn)行對(duì)弈。例如“斜月局”、“長(zhǎng)星局”等。 </p><p> ?。?)“三手可交換”:指黑棋下第二手棋〔盤(pán)面第三手棋〕之后,白方如感覺(jué)黑方棋形不利于己方,可提出交換,即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方〔此方法不適用于指定開(kāi)局打法,而用于隨意開(kāi)局〕。采用此規(guī)定以后,黑棋就不會(huì)再使用諸如“浦月”、“花月”之類的必勝開(kāi)局了。</p><p> (3)
50、“五手兩打”:指黑棋在下盤(pán)面上關(guān)鍵的第五手棋時(shí),必須下兩步棋,讓白方在這兩步棋中任選一步,然后再繼續(xù)下。 </p><p> 采用這一系列規(guī)定以后,黑棋先行就再無(wú)優(yōu)勢(shì)可言。 </p><p><b> 具體算法分析</b></p><p> 4.3.1 棋盤(pán)局勢(shì)狀態(tài)表示</p><p> 要讓計(jì)算機(jī)學(xué)會(huì)下棋,首先
51、就要把下棋問(wèn)題表示成計(jì)算機(jī)可理解的形式,即把五子棋問(wèn)題形式化,存在計(jì)算機(jī)中,并能讓搜索算法對(duì)這些數(shù)據(jù)進(jìn)行操作。需要在計(jì)算機(jī)中表示的主要問(wèn)題有棋盤(pán)局勢(shì)狀態(tài)及落子的順序等。棋盤(pán)表示主要探討的是是什么數(shù)據(jù)結(jié)構(gòu)來(lái)表示棋盤(pán)上的信息。一般說(shuō)來(lái),這與具體的棋類知識(shí)密切相關(guān)。通常,用來(lái)描述棋盤(pán)及其上棋子信息的是一個(gè)二維數(shù)組。</p><p> 要讓計(jì)算機(jī)知道棋盤(pán)局勢(shì)狀態(tài),就是要它記住棋盤(pán)中哪個(gè)位置有黑子,哪個(gè)位置有白子以及哪個(gè)
52、位置是空點(diǎn)。因?yàn)槲遄悠宓钠灞P(pán)是15行,15列,因此可以將棋盤(pán)狀態(tài)的描述用一個(gè)15×15的二維數(shù)組表示。</p><p> 本程序的數(shù)據(jù)將用如下所示的數(shù)據(jù)表示:</p><p> int p[15][15]=</p><p> {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
53、},</p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},</p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},</p><p> {0,0,0,0,0,0,0,0,0,0,
54、0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},</p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},</p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},<
55、;/p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},</p><p> {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};</p><p> 其中,(1)棋盤(pán)狀態(tài)數(shù)據(jù)由一個(gè)15×15的二維數(shù)組表示。(2)用數(shù)字“1”和“2”來(lái)表示不同的棋子,黑色
56、棋子用“2”表示,白色棋子用“1”表示。(3)沒(méi)有棋子的格子用“0”表示。</p><p> 4.3.2棋盤(pán)中下棋的順序表示</p><p> 棋局中下棋的順序也很重要,應(yīng)該是黑白雙方交替下棋。</p><p> 本程序用t來(lái)判斷黑白又方下棋順序,t為“0”時(shí)由紅方下棋,t為“1”時(shí)由黑方下棋,由于五子棋規(guī)則中黑棋先手,所以初始值t=1,即玩家執(zhí)黑先手。每次落
57、棋后,都應(yīng)改變 t 的值,t 在整個(gè)對(duì)弈過(guò)程中都只能為1或者為2,即在任意時(shí)刻,都有一方可以落棋,也只能有一方落棋。</p><p><b> 4.3.3具體算法</b></p><p> 電腦要選擇有利于它的最佳下法,就要能判斷哪種形勢(shì)對(duì)它最有利。但往往對(duì)一個(gè)形勢(shì)的判斷是很難做到準(zhǔn)確的,特別是一盤(pán)棋剛開(kāi)始的時(shí)候,棋盤(pán)的形勢(shì)不明朗,即使是專家也不能做出準(zhǔn)確的判斷。
58、為了判斷哪種下法最有利,我們往往需要向后面計(jì)算幾步,看看在走了幾步棋之后,局面的形勢(shì)如何。這被稱為“多算勝”,也就是說(shuō),誰(shuí)看得越深遠(yuǎn),誰(shuí)就可以獲勝。這種思維方式被用到了計(jì)算機(jī)上。向后面計(jì)算的步數(shù)越多,系統(tǒng)開(kāi)銷就越大,本系統(tǒng)只向后計(jì)算一步,根據(jù)威脅的優(yōu)先級(jí)來(lái)選擇落棋的最佳點(diǎn)。</p><p> 輪到電腦下棋時(shí),電腦先向棋盤(pán)搜索合法的落棋點(diǎn),即棋盤(pán)的空白點(diǎn)。然后再利用下面的算法先擇最佳落棋點(diǎn)。在每個(gè)空白點(diǎn),都有四個(gè)
59、方向需要考慮,即—、|、﹨、∕四個(gè)方向。以下就用○表示電腦所執(zhí)的黑棋,用□表示玩家所執(zhí)的白棋,用×表示棋盤(pán)的空白點(diǎn)。在設(shè)計(jì)的時(shí)候,盡可能把所有情況全面考慮,設(shè)置為搜索一個(gè)最佳落棋點(diǎn)位置的時(shí)候,需要保證左右展開(kāi)后碰壁,之間的空間距離至少要有六格(而不是五子),否則就是死子。</p><p> 算法流程是:順序向下搜索,每次有符合要求的點(diǎn)時(shí),視為最佳落棋點(diǎn),并在該點(diǎn)落棋,同時(shí)將t賦值為1,退出搜索并判斷
60、是否有一方獲勝,然后等待玩家落棋,再重復(fù)這一過(guò)程,直到有一方獲勝。</p><p><b> 圖1 算法流程圖</b></p><p> 一,電腦搜索棋盤(pán)里紅棋是否有一步獲勝的棋,即在同一條線路上有連續(xù)五個(gè)位置上,有四顆為紅棋,另外一顆為空,這時(shí)就不用考慮玩家的棋局,直接就可以獲勝。能直接獲勝的棋型有×○○○○×、□○○○○×,還包括
61、通過(guò)四三來(lái)形成的活四,包括有○○×○○、○○○×○、○×○○○。</p><p> 二,電腦搜索棋盤(pán)里黑棋是否有一步獲勝的棋,這時(shí)就應(yīng)該讓玩家的“活四”變“死四”,這是紅棋威脅級(jí)別最高的,應(yīng)立即做出反應(yīng)。有直接威脅的棋型有□×□□□、×□□□□×、□□□×□、×□□□□×。對(duì)于×□□□□×這種棋型,其實(shí)
62、玩家已經(jīng)獲勝。</p><p> 三,電腦搜索棋盤(pán)里紅棋是否有可形成活四的棋型,進(jìn)一步?jīng)_四,這時(shí)就應(yīng)該主動(dòng)進(jìn)攻,這種棋型包括×○○○××、×○○×○×、×○×○○×。這樣的棋只需兩步方可獲勝,威脅級(jí)別僅次于上面兩種。</p><p> 四,電腦搜索棋盤(pán)里黑棋是否有可形成活四的棋型,若有,就有阻止沖
63、四,讓玩家的“活三”變死三,這時(shí)就體現(xiàn)了電腦的防守策略,這種棋型包括:××□□□×、×□×□□×、×□□×□×。其中××□□□×在封堵后還具有威脅性,所以在電腦沒(méi)有進(jìn)攻機(jī)會(huì)時(shí),也應(yīng)該考慮這樣的棋型的威脅性,因?yàn)榭梢岳眠@種棋型來(lái)造四三來(lái)獲勝。</p><p> 五,電腦搜索棋盤(pán)里紅棋是否有可形
64、成活三的棋型,這是獲勝的過(guò)渡棋,在整個(gè)棋局中非常重要,這樣的棋型越多,紅棋造活三的機(jī)會(huì)就越多,是獲勝的關(guān)鍵。這種棋型包括:××○○××、××○×○×,由于需要三步獲勝,所以優(yōu)先級(jí)比較低。</p><p> 表1是獲勝情況分析表,優(yōu)先級(jí)是按所需步數(shù)和落棋的順序來(lái)決定的,在獲勝所需步數(shù)相同的情況下,電腦所執(zhí)的紅棋優(yōu)先級(jí)高于黑棋。<
65、/p><p> 表1 獲勝情況分析表</p><p><b> 系統(tǒng)流程</b></p><p> 五子棋的規(guī)則如下:(1)棋盤(pán):采用15×15的棋盤(pán)。(2)下法玩家執(zhí)黑先手,電腦執(zhí)白后手,輪流在棋盤(pán)上選擇一個(gè)無(wú)子的交叉點(diǎn)落子。無(wú)子的交叉點(diǎn)又被稱為空點(diǎn)。(3)輸贏判斷:黑、白雙方有一方的5顆棋子在橫、豎或斜方向上連接成一線即為該方贏
66、。(4)對(duì)于五子棋可分為禁手和無(wú)禁手兩類,本游戲采用無(wú)禁手,這樣就對(duì)執(zhí)黑方很有力,獲勝的機(jī)率非常大。可用15×15的二維數(shù)表示棋盤(pán)內(nèi)各點(diǎn)狀態(tài) (空、白子、黑子) ;</p><p> 五子棋游戲規(guī)則簡(jiǎn)單,在每次玩家或電腦落棋后,都要去判斷是否游戲是否分出勝負(fù),如沒(méi)有,另一方才能繼續(xù)下棋。一局游戲結(jié)束后,可以選擇再來(lái)一盤(pán),這時(shí)將棋盤(pán)數(shù)據(jù)清空,又開(kāi)始新的棋局。系統(tǒng)流程如圖2所示。</p>&
67、lt;p><b> 圖2 系統(tǒng)流程圖</b></p><p><b> 系統(tǒng)功能實(shí)現(xiàn)</b></p><p><b> 窗口設(shè)計(jì)</b></p><p> 根據(jù) Windows API 函數(shù)來(lái)編寫(xiě)應(yīng)用程序的順序結(jié)構(gòu):調(diào)用 WinMain 函數(shù)開(kāi)始執(zhí)行→定義窗口類→初始化窗口類→窗口的實(shí)例
68、化→通過(guò)消息循環(huán)獲取消息并將消息發(fā)送給消息處理函數(shù)做出相應(yīng)的操作。</p><p> 我們首先應(yīng)該創(chuàng)建一個(gè)窗口,生成一個(gè)窗口主要有兩步:定義窗口類和初始化窗口類。</p><p> 首先用 InitWindowsClass 來(lái)定義一個(gè)窗口類,窗口類事實(shí)上是 struct 結(jié)構(gòu)體,內(nèi)部有10個(gè)分量,他們是用來(lái)于初始化窗口類對(duì)象而用的。根據(jù)函數(shù)里聲明的各個(gè)參數(shù)來(lái)執(zhí)行,它在里面定義了窗口類對(duì)
69、象、聲明了窗口的類對(duì)象名稱、應(yīng)用程序?qū)嵗浔?、消息處理函?shù)名、光標(biāo)樣式和窗口背景等,其它的都設(shè)置為初始值。</p><p> 函數(shù)關(guān)鍵語(yǔ)句:BOOL InitWindowsClass(HINSTANCE hInstance)</p><p> { WndClass.hbrBackground=(HBRUSH)(CreateSolidBrush(RGB(240,240,240))); &
70、lt;/p><p> WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);</p><p> WndClass.hInstance=hInstance;</p><p> WndClass.lpfnWndProc=WndProc;</p><p> WndClass.lpszClassName=&quo
71、t;WinFill";</p><p> return RegisterClass(&WndClass);}</p><p> 然后用 InitWindows 函數(shù)來(lái)初始化窗口類,在窗口類對(duì)象的初始化過(guò)程中,我們定義了窗口的一些簡(jiǎn)單一般特征,比如背景顏色呀,光標(biāo)等等。但是在利用 CreateWindow 創(chuàng)建窗口的時(shí)候可以設(shè)置更多的細(xì)節(jié),比如窗口標(biāo)題這些。</p
72、><p><b> 函數(shù)主要參數(shù):</b></p><p> hWnd=CreateWindow("WinFill",</p><p><b> "五子棋游戲",</b></p><p> WS_OVERLAPPEDWINDOW,</p
73、><p><b> 0,0,</b></p><p><b> 1024,768,</b></p><p> hInstance);</p><p> 其中,定義窗口類對(duì)象名稱為"WinFill",窗口標(biāo)題為"五子棋游戲",窗口風(fēng)格為WS_OVERLAPP
74、EDWINDOW,說(shuō)明此窗口是一個(gè)層疊式窗口,含有邊框、標(biāo)題欄、系統(tǒng)菜單、最大最小化按鈕的窗口。</p><p><b> 棋盤(pán)設(shè)計(jì)</b></p><p> 程序的實(shí)現(xiàn)上,首先完成界面的設(shè)計(jì),在界面的設(shè)計(jì)上,使用了二維數(shù)組的棋盤(pán)格式,考慮到五子棋的落子后,是不會(huì)再次移動(dòng)的,所以采用劃直線的方法模擬一個(gè)棋盤(pán)。棋盤(pán)大小為560×560,起始坐標(biāo)為(200,
75、100),每個(gè)格子大小為(40,40)。 </p><p> 首先用 GetStockObject 函數(shù)創(chuàng)建一個(gè)畫(huà)筆和畫(huà)刷,用 SelectObject 選擇當(dāng)前使用的畫(huà)筆和畫(huà)刷,畫(huà)筆的作用是畫(huà)棋盤(pán)的邊框及格子,畫(huà)刷的作用是填充棋盤(pán)的背景色,先取畫(huà)筆后我們才能用它來(lái)畫(huà)棋盤(pán)。為了增加棋盤(pán)的美觀,畫(huà)刷顏色選取灰色,與窗口的銀白色分開(kāi)。</p><p> 然后用 Rectangle 函數(shù)畫(huà)一
76、個(gè)矩形,就是棋盤(pán)的邊框,棋盤(pán)的左上角坐標(biāo)為(200,100),右下角坐標(biāo)為(760,660)。</p><p> 再畫(huà)棋盤(pán)的各橫軸及縱軸,在畫(huà)每一條直線前,需用 MoveToEx 函數(shù)指定當(dāng)前畫(huà)筆的位置,然后用 LineTo 函數(shù)從指定這點(diǎn)開(kāi)始畫(huà)一條到指定的另外一點(diǎn)的直線。</p><p> 函數(shù)段為:hPen=(HPEN)GetStockObject(BLACK_PEN);</
77、p><p> SelectObject(hDC,hPen);</p><p> hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); </p><p> SelectObject(hDC,hBrush); </p><p> Rectangle(hDC,200,100,760,660); <
78、/p><p> MoveToEx(hDC,200,140,NULL); //第一條橫線</p><p> 在這些都完成了之后,對(duì)界面進(jìn)行最后的完善,通過(guò)添加按鈕來(lái)使用戶在和電腦對(duì)弈的同時(shí),可以從這些按鈕中獲得必要的幫助。</p><p> 本系統(tǒng)一共設(shè)置了四個(gè)按鈕:“和棋”、“再來(lái)一盤(pán)”,“退出”和“幫助”。它們的畫(huà)法采用文本框模擬按鈕,先畫(huà)一個(gè)矩形,在矩形里填
79、充提示信息,用鼠標(biāo)單擊事件來(lái)響應(yīng)各個(gè)按鈕。</p><p> 因此綜上所述,在界面的設(shè)計(jì)上,主要有兩個(gè)模塊,一個(gè)是棋盤(pán)模塊,一個(gè)是按鈕模塊。</p><p><b> 按鈕功能的實(shí)現(xiàn)</b></p><p> 本系統(tǒng)一共設(shè)置了四個(gè)按鈕:“和棋”、“再來(lái)一盤(pán)”,“退出”和“幫助”。它們的畫(huà)法采用文本框模擬按鈕,先畫(huà)一個(gè)矩形,在矩形里填充提示
80、信息,用鼠標(biāo)單擊事件來(lái)響應(yīng)各個(gè)按鈕。這四個(gè)按鈕基本滿足了一般玩家的需求。</p><p> 按鈕的畫(huà)法:先在主函數(shù)里面定義四個(gè)變量,分別存儲(chǔ)按鈕的標(biāo)題,然后在棋盤(pán)外畫(huà)四個(gè)矩形,然后在四個(gè)矩形里分別顯示按鈕的標(biāo)題。</p><p><b> 具體實(shí)現(xiàn)方法:</b></p><p><b> “退出”按鈕:</b><
81、;/p><p> Rectangle(hDC,770,110,820,135);</p><p> TextOut(hDC,780,115,lpsz1,strlen(lpsz1));</p><p> if(i>770&&i<820&&j>495&&j<520)</p><
82、p> {PostQuitMessage(0);</p><p> return(0);}</p><p> 以上這幾行代碼就實(shí)現(xiàn)了退出按鈕按鈕的畫(huà)法及實(shí)現(xiàn),lpsz1 里存儲(chǔ)的是按鈕標(biāo)題“退出”,在(770,110)到(820,135)這個(gè)區(qū)域畫(huà)一按鈕,strlen(lpsz1) 求的是字符串的長(zhǎng)度,求出來(lái)的值就是文本顯示的長(zhǎng)度。當(dāng)鼠標(biāo)單擊這個(gè)區(qū)域的時(shí)候,就產(chǎn)生消息,并執(zhí)行 P
83、ostQuitMessage(0) 這條語(yǔ)句,這條語(yǔ)句的作用是退出應(yīng)用程序。這樣就模擬出了一個(gè)退出按鈕,實(shí)現(xiàn)了程序的退出。</p><p><b> “再來(lái)一盤(pán)”按鈕:</b></p><p> Rectangle(hDC,100,325,180,375);</p><p> TextOut(hDC,110,340,lpsz5,strle
84、n(lpsz5));</p><p> if(i>=100&&i<=325&&j>=180&&j<=375) //再來(lái)一盤(pán)</p><p><b> {</b></p><p> for(m=0;m<=a;m++)</p><p>&
85、lt;b> {c[m]=0;</b></p><p><b> d[m]=0;</b></p><p><b> e[m]=0;</b></p><p><b> f[m]=0;</b></p><p><b> }</b>&l
86、t;/p><p> for(m=0;m<=14;m++)</p><p> for(n=0;n<=14;n++)</p><p> {p[m][n]=0;}</p><p> 在畫(huà)法和退出按鈕一樣,都是利用矩形內(nèi)填充文本的方法,在響應(yīng)這個(gè)按鈕時(shí)有一定條件,就是游戲已經(jīng)分出勝負(fù)或者通過(guò)和棋結(jié)束了游戲。這時(shí)才會(huì)產(chǎn)生再來(lái)一盤(pán)的消息,
87、它會(huì)將所有棋盤(pán)信息置為初始值,比如將棋盤(pán)狀態(tài)函數(shù)P[][]里的數(shù)組全部清空,都賦初值為0,表示下棋棋子數(shù)的 a 也置為0等。</p><p><b> “幫助”按鈕:</b></p><p> Rectangle(hDC,770,110,820,135);</p><p> TextOut(hDC,780,115,lpsz1,strlen
88、(lpsz1));</p><p> if(i>=770&&i<=820&&j>=110&&j<=135)</p><p> {MessageBox(hWnd,"需幫助 請(qǐng)?jiān)诤谄逑缕鍟r(shí)單擊'幫助' \n 一方獲勝后可單擊'退出'退出程序 \n 雙方僵持情況下可'和棋
89、' \n 如有興趣請(qǐng)'再來(lái)一盤(pán)'","幫助",MB_OK);}</p><p> 畫(huà)法和前面的一樣,這里面使用了文本換行,在每行之間用 \n 將需要換行的文字隔開(kāi),于是在單擊這個(gè)按鈕后,就會(huì)看到有多行文字的消息框出現(xiàn)。</p><p><b> 勝負(fù)判斷</b></p><p> 在五
90、子棋游戲中,判斷勝負(fù)是很重要的一項(xiàng)工作,最先在棋盤(pán)橫向、豎向、斜向形成五顆連續(xù)相同顏色的棋子的一方為勝。</p><p> (1)橫向:橫向比較好判斷,縱坐標(biāo)不變,橫坐標(biāo)向右遞增,有五顆連續(xù)的相同顏色的棋子即獲勝,所以橫坐標(biāo)的范圍不必是(0,14),只搜索(0,10)即可。</p><p> ?。?)縱向:與橫向一樣,這時(shí)橫坐標(biāo)不變,縱坐標(biāo)向下遞增,所以縱坐標(biāo)的搜索范圍可以縮小到(0,1
91、0)。</p><p> ?。?)“﹨”向:這時(shí)搜索應(yīng)從左上角開(kāi)始,橫縱坐標(biāo)同時(shí)遞增,橫縱坐標(biāo)的搜索范圍都是(0,10)。</p><p> ?。?)“/”向:這時(shí)縱坐標(biāo)是向下遞增,但橫坐標(biāo)是向左遞減的,所以搜索范圍就不能從左上角(0,0)開(kāi)始,應(yīng)從(0,4)開(kāi)始,橫坐標(biāo)的搜索范圍是(4,14),縱坐標(biāo)的搜索范圍是(0,10)。</p><p> 下面就以“/”向
92、為例,在程序中具體實(shí)現(xiàn)過(guò)程:</p><p> for(m=0;m<=10;m++)</p><p> for(n=4;n<=14;n++)</p><p><b> {</b></p><p> if(p[m][n]==1&&p[m+1][n-1]==1&&p[m+
93、2][n-2]==1&&p[m+3][n-3]==1&&p[m+4][n-4]==1&&g==1)</p><p><b> {</b></p><p> MessageBox(hWnd,"黑棋贏","結(jié)束",MB_OK);</p><p><b&
94、gt; g=0;</b></p><p><b> }</b></p><p><b> else </b></p><p> if(p[m][n]==2&&p[m+1][n-1]==2&&p[m+2][n-2]==2&&p[m+3][n-3]==2&am
95、p;&p[m+4][n-4]==2&&g==1)</p><p><b> {</b></p><p> MessageBox(hWnd,"紅棋贏","結(jié)束",MB_OK);</p><p><b> g=0;</b></p><p&
96、gt;<b> }</b></p><p> 一方獲勝后,會(huì)彈出消息框,提示一方獲勝游戲結(jié)束,并將 g 置為0,這時(shí)游戲就不能再繼續(xù),對(duì)下棋、“和棋”等起了屏蔽作用。在 if 語(yǔ)句里面有 g=0 這個(gè)條件,是限制游戲結(jié)束后重復(fù)判斷勝負(fù),只要一方獲勝,就不能對(duì)棋盤(pán)做任何操作,只有對(duì)按鈕采取操作有效。</p><p><b> 系統(tǒng)測(cè)試與分析</b&
97、gt;</p><p><b> 運(yùn)行結(jié)果</b></p><p> 本系統(tǒng)在 Visual C++ 6.0 下調(diào)試通過(guò),調(diào)試成功后,打開(kāi)debug目錄下five.exe,開(kāi)始運(yùn)行五子棋游戲。我就從界面、按鈕功能、勝負(fù)的判斷幾個(gè)方面來(lái)測(cè)試系統(tǒng)。</p><p> 1 界面:該窗口具有最大化、最小化關(guān)閉按鈕,系統(tǒng)菜單,標(biāo)題欄,邊框,背景色為
98、銀白色,棋盤(pán)大小為15×15,背景為灰色。</p><p><b> 圖3 游戲界面</b></p><p> 2 畫(huà)棋子:本系統(tǒng)能夠在棋盤(pán)方格的交叉處畫(huà)棋子,棋子半徑為10。</p><p><b> 圖4 畫(huà)棋子</b></p><p> 3 判斷勝負(fù):當(dāng)棋盤(pán)上“一”、“∣”、
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五子棋游戲軟件工程課程設(shè)計(jì)
- 五子棋游戲畢業(yè)設(shè)計(jì)
- 基于vc的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)論文】
- 畢業(yè)設(shè)計(jì)---基于labview設(shè)計(jì)的五子棋游戲
- 畢業(yè)設(shè)計(jì)---網(wǎng)絡(luò)五子棋游戲
- 基于vc的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)【開(kāi)題報(bào)告】
- 網(wǎng)絡(luò)五子棋游戲畢業(yè)設(shè)計(jì)
- 基于vc的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)【文獻(xiàn)綜述】
- 計(jì)算機(jī)畢業(yè)論文---五子棋游戲軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)(論文)-五子棋游戲程序設(shè)計(jì)與開(kāi)發(fā)
- 基于vc的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)【任務(wù)書(shū)】
- 基于java的五子棋游戲設(shè)計(jì)
- 人機(jī)對(duì)弈五子棋游戲畢業(yè)設(shè)計(jì)
- 基于vc++的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)【開(kāi)題報(bào)告】
- 軟件工程畢業(yè)設(shè)計(jì)(論文)-基于android的五子棋游戲設(shè)計(jì)
- 基于android的五子棋游戲設(shè)計(jì)
- 五子棋畢業(yè)論文-html開(kāi)發(fā)五子棋的原型設(shè)計(jì)
- 五子棋游戲設(shè)計(jì)報(bào)告
- java五子棋畢業(yè)設(shè)計(jì)--java五子棋對(duì)弈程序的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)(論文)-基于android的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論