五子棋需求分析報告08093337_第1頁
五子棋需求分析報告08093337_第2頁
五子棋需求分析報告08093337_第3頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國礦業(yè)大學(xué)應(yīng)用系統(tǒng)開發(fā)實踐設(shè)計題目:基于VC的五子棋游戲軟件的設(shè)計與開發(fā)指導(dǎo)教師:學(xué) 生:專 業(yè):計算機科學(xué)與技術(shù) 09-1班2012年5月目錄1 引 言 22 系統(tǒng)需求分析 2.2.1 系統(tǒng)需求 22.2 功能需求 22.3 系統(tǒng)運行環(huán)境 23 五子棋算法分析 3.3.1 五子棋的發(fā)展 33.2 五子棋的規(guī)則 33.3 具體算法分析 4棋盤局勢狀態(tài)表示 4.3.3.2 棋盤中下棋的順序表示 5.3.3.3 具體算法 54 系統(tǒng)流程 75 系統(tǒng)功能實現(xiàn) 8.5.1 窗口設(shè)計 95.2 棋盤設(shè)計 95.3 按鈕功能的實現(xiàn) 1.0.5.4 勝負(fù)判斷 1.1.6 系統(tǒng)測試與分析 1.3.7 結(jié)論

2、1.7.1.引 言目前網(wǎng)絡(luò)上有很多五子棋子游戲,玩法簡單,娛樂性也很高。五子棋不僅能增強思維能力,提高 智力,而且富含哲理,有助于修身養(yǎng)性。通過對五子棋的設(shè)計與開發(fā),了解和掌握游戲開發(fā)的原理與 方法。讓電腦像人腦一樣思考,一直是人工智能發(fā)展的最終目標(biāo)。作為一門邊緣學(xué)科,它有諸多的研 究領(lǐng)域,博弈即為其中之一。博弈的參加者可以是個人、集體、某種生物或機器,他們都力圖用自己 的“智力”去擊敗對手。博弈為人工智能提供了一個極好的試驗場所,人工智能中的許多概念和方法都 是從博弈程序中提煉出來的,人工智能中大多以下棋為例來研究博弈規(guī)律。本文以五子棋為入口,設(shè) 計了一個五子棋雙人對戰(zhàn)和人機對弈系統(tǒng),以實現(xiàn)

3、人和人,人和計算機的博弈,最終的目的是為了建 立一個有具體規(guī)則的五子棋平臺。2.需求分析目前網(wǎng)絡(luò)上有很多五子棋子游戲, 玩法簡單,娛樂性也很高。 五子棋不僅能增強思維 能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。通過對五子棋的設(shè)計與開發(fā),了解和 掌握游戲開發(fā)的原理與方法。讓電腦像人腦一樣思考,一直是人工智能發(fā)展的最終目標(biāo)。 作為一門邊緣學(xué)科, 它有諸多的研究領(lǐng)域, 博弈即為其中之一。 博弈的參加者可以是個人、 集體、某種生物或機器,他們都力圖用自己的 “智力 ”去擊敗對手。人機對弈程序的要點, 至少應(yīng)具備以下 4 個部分: (1) 狀態(tài)表示:某種在機器中表示棋局的方法,能夠讓程序知 道博弈的

4、狀態(tài)。 (2) 走法產(chǎn)生:產(chǎn)生合法走法的規(guī)則,以使博弈公正地進(jìn)行,并可判斷對 手是否亂走。 (3)搜索技術(shù):從所有合法的走法中選擇最佳的走法技術(shù)。 (4) 對弈界面。2.1 系統(tǒng)需求五子棋作為一款休閑益智游戲, 它最大的優(yōu)點在于游戲規(guī)則家喻戶曉, 簡單,上手快, 趣味性強,所以受廣大用戶青睞, 在各大提供棋牌類游戲的平臺都可以看到玩五子棋游戲 的人很多。 休閑益智游戲中等級并不是最重要的追求目標(biāo), 通過對游戲規(guī)則的熟悉, 能很 快上手掌握其操作方式,也更適合男女老幼全家共同娛樂,花費時間簡短,速戰(zhàn)速決, 在 短時間內(nèi)感受到游戲的樂趣, 完全享受氣氛輕松活躍的游戲過程。 此種娛樂方式既不耽誤 時

5、間也能輕松調(diào)劑娛樂, 充分適合現(xiàn)代人們的娛樂需求。 更主要的是開發(fā)了人的智力, 成 為年輕一代最流行的游戲, 據(jù)統(tǒng)計,五子棋游戲的玩家中, 學(xué)生占了接近三分之一的比例, 對學(xué)生的智力健康成長起一定作用,正所謂休閑娛樂兩不誤。2.2 功能需求要求系統(tǒng)界面簡潔, 操作方便,把五子棋游戲規(guī)則中最基本的規(guī)則體現(xiàn)出來, 比如“和 棋”、“重新開局”等。五子棋還有一大特點就是速戰(zhàn)速決,電腦應(yīng)在很短時間內(nèi)就應(yīng)做 出判斷,并能提供一定的幫助,違反游戲規(guī)則的時候應(yīng)立即指出。在正規(guī)五子棋比賽中, 都設(shè)置了“禁手”這一規(guī)則。2.3 系統(tǒng)運行環(huán)境Win 9X / Win ME/ Win NT/ Win 2000/ W

6、in XP/ Win 2003/3 五子棋算法分析3.1 五子棋的發(fā)展五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。 現(xiàn)代五子棋日文稱之為“連珠”, 英 譯為“ Renju”,英文稱之為“ Goba ng”或“ FIR ” (Five in a Row的縮寫),亦有“連五 子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。五子棋不僅能增強思維能力, 提高智力, 而且富含哲理,有助于修身養(yǎng)性。 它既有簡 單易學(xué)的特性, 為人民群眾所喜聞樂見, 又有深奧的技巧和高水平的國際性比賽; 它的棋 文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。 它是中西文化

7、的交流點,是古今哲理的結(jié)晶。五子棋起源于古代中國, 發(fā)展于日本,風(fēng)靡于歐洲。對于它與圍棋的關(guān)系有兩種說法, 一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲; 一說源于圍棋,是圍棋 發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同, 縱橫各十七道。 五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、 日本等地。 據(jù)日本 史料文獻(xiàn)介紹,中國古代的五子棋是經(jīng)由高麗 (朝鮮),于 1688年至 1704年的日本元祿 時代傳到日本的。到日本明治 32 年(公元 1899年) ,經(jīng)過公開征名, “連珠”這一名稱 才被正式確定下來, 取意于“日月如合壁,五星如連珠”。從此

8、,連珠活動經(jīng)過了不斷的 改良,主要是規(guī)則的變化(即對執(zhí)黑棋一方的限制),例如, 1899 年規(guī)定,禁止黑白雙 方走“雙三”; 1903 年規(guī)定,只禁止黑方走“雙三”; 1912年規(guī)定,黑方被迫走“雙三” 亦算輸; 1916 年規(guī)定,黑方不許走“長連”; 1918 年規(guī)定,黑方不許走“四、三、三”; 1931年規(guī)定,黑方不許走“雙四”,并規(guī)定將 19X 19的圍棋盤改為15X15的連珠專用 棋盤。本世紀(jì)初五子棋傳入歐洲并迅速風(fēng)靡全歐。 通過一系列的變化, 使五子棋這一簡單 的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋, 同時也成為一種國際比賽棋。簡單介紹一下文章中會遇到的一些關(guān)于五子棋最

9、基本的術(shù)語(1)先手:進(jìn)攻的著法,也指對弈雙方執(zhí)黑棋先在棋盤上落子的一方;(2)四三:指同時具備兩個先手,其中一個四,另一個是活三;(3)活三(包括連三和跳三):連三:緊緊相連的同色三子跳三:中間間隔一子 的活三 ;(4) 四四:一子落下同時形成兩個“四”的棋形;( 5)三三:一子落下形成了兩個活三的棋形;(6)長連:相同顏色的連續(xù)六子或六子以上;(7)禁手:對局中禁止使用的戰(zhàn)術(shù)或被判為負(fù)的行棋手段;(8)勝局:對局的一方獲勝,稱為“勝局”。包括:一方首先在棋盤的直線或橫 線或斜線上形成連續(xù)的五子或五子以上 (特指白方)。對方表示認(rèn)輸。對方超過比賽 規(guī)定的時限。 當(dāng)黑方禁手形成未能同時形成五連

10、, 白方立即指出禁手后, 判定為白方勝 局。對方遲到超過容許時間。對方嚴(yán)重犯規(guī)而被判負(fù);(9)和棋:不分勝負(fù)的對局或雙方同意平局。3.2 五子棋的規(guī)則五子棋游戲的一個特點是先行的一方優(yōu)勢很大, 因此在職業(yè)比賽中對黑方做了種種限 制,以利公平競爭。五子棋的比賽規(guī)則如下:(1)黑棋先手、白棋后手,從天元開始相互順序落子;(2)最先在棋盤橫向、縱向或斜向形成連續(xù)的同色五個棋子的一方為勝;(3)黑棋禁手判負(fù)、白棋無禁手。黑棋禁手有“三、三”、“四、四”和“長連”, 包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取勝;(4)如分不出勝負(fù),則到為平局;(5)五連與禁手同時形成,判勝;(6)黑方禁

11、手形成時,白方應(yīng)立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指出,反而 繼續(xù)落子,則禁手失效,不再判黑方負(fù)。五子棋是黑白雙方或兩個人之間的競技活動, 由于對黑白雙方規(guī)則不同, 黑棋必須先 行。一般采用猜先的方法來決定誰執(zhí)黑先行, 即雙方各抓一種顏色的幾枚棋子, 大數(shù)減小 數(shù),單數(shù)雙方交換, 偶數(shù)不換;黑方在落下關(guān)鍵的第五子即形成五連的同時,如又形成禁 手,此時因黑方已經(jīng)成五,而“五”在五子棋中是至高無上的,故禁手失效,黑方勝;所 謂黑方形成禁手, 是指黑方落下一子同時形成兩個或兩個以上的活三、 沖四及長連等。 此 時白方應(yīng)立即指出,自然而勝。專業(yè)連珠五子棋雖然對黑棋采取了種種限制,但是黑棋先行的優(yōu)勢依

12、然很大。因此, 在高段位的專業(yè)比賽中,又出現(xiàn)了三種特殊的規(guī)定:(1)“指定打法”:指比賽雙方按照約定好的開局進(jìn)行對弈。例如“斜月局”、 “長 星局”等。(2)“三手可交換”:指黑棋下第二手棋盤面第三手棋之后,白方如感覺黑方 棋形不利于己方, 可提出交換, 即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方 此方法不適用于指定開局 打法,而用于隨意開局。采用此規(guī)定以后,黑棋就不會再使用諸如“浦月”、“花月” 之類的必勝開局了。(3)“五手兩打”:指黑棋在下盤面上關(guān)鍵的第五手棋時,必須下兩步棋,讓白方 在這兩步棋中任選一步,然后再繼續(xù)下。采用這一系列規(guī)定以后,黑棋先行就再無優(yōu)勢可言。3.3 具體算法分析棋盤局勢狀態(tài)表示

13、棋盤表示主要探討的是是什么數(shù)據(jù)結(jié)構(gòu)來表示棋盤上的信息。 一般說來, 這與具體的 棋類知識密切相關(guān)。通常,用來描述棋盤及其上棋子信息的是一個二維數(shù)組。要讓計算機知道棋盤局勢狀態(tài), 就是要它記住棋盤中哪個位置有黑子, 哪個位置有白 子以及哪個位置是空點。因為五子棋的棋盤是 15 行,15 列,因此可以將棋盤狀態(tài)的描述 用一個15X 15的二維數(shù)組表示。本程序的數(shù)據(jù)將用如下所示的數(shù)據(jù)表示: int p1515=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, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

14、,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,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,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,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,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

15、,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;其中,(1)棋盤狀態(tài)數(shù)據(jù)由一個15X 15的二維數(shù)組表示。(2)用數(shù)字“ 1”和“2” 來表示不同的棋子,黑色棋子用“ 2”表示,白色棋子用“ 1”表示。( 3)沒有棋子的格 子用“ 0”表示。3.3.2 棋盤中下棋的順序表示棋局中下棋的順序也很重要,應(yīng)該是黑白雙方交替下棋。本程序用 t 來判斷黑白雙方下棋順序, t 為“0”時由白方下棋, t 為“1”時由黑方下 棋,由于五子棋規(guī)則中黑棋先手,所以初始值 t=1,即玩家執(zhí)黑先手。每次落棋后,都應(yīng) 改變 t 的值, t 在整個對

16、弈過程中都只能為 1 或者為 0,即在任意時刻,都有一方可以落 棋,也只能有一方落棋。3.3.3 具體算法本系統(tǒng)中較復(fù)雜的部分是人機對戰(zhàn)部分。 下面將簡單分析人機對戰(zhàn), 雙人對戰(zhàn)則省略。 電腦要選擇有利于它的最佳下法, 就要能判斷哪種形勢對它最有利。 但往往對一個形勢的 判斷是很難做到準(zhǔn)確的, 特別是一盤棋剛開始的時候, 棋盤的形勢不明朗, 即使是專家也 不能做出準(zhǔn)確的判斷。 為了判斷哪種下法最有利, 我們往往需要向后面計算幾步, 看看在 走了幾步棋之后,局面的形勢如何。這被稱為“多算勝”,也就是說,誰看得越深遠(yuǎn),誰 就可以獲勝。這種思維方式被用到了計算機上。 向后面計算的步數(shù)越多, 系統(tǒng)開銷

17、就越大, 本系統(tǒng)只向后計算一步,根據(jù)威脅的優(yōu)先級來選擇落棋的最佳點。輪到電腦下棋時, 電腦先向棋盤搜索合法的落棋點, 即棋盤的空白點。 然后再利用下 面的算法先擇最佳落棋點。在每個空白點,都有四個方向需要考慮,即一、卜、/四個方向。以下就用O表示電腦所執(zhí)的黑棋,用表示玩家所執(zhí)的白棋,用X表示棋盤的空 白點。在設(shè)計的時候, 盡可能把所有情況全面考慮, 設(shè)置為搜索一個最佳落棋點位置的時 候,需要保證左右展開后碰壁, 之間的空間距離至少要有六格 (而不是五子 ) ,否則就是死 子。人機對戰(zhàn)算法流程是:順序向下搜索,每次有符合要求的點時,視為最佳落棋點, 并 在該點落棋,同時將t賦值為1,退出搜索并判

18、斷是否有一方獲勝,然后等待玩家落棋, 再重復(fù)這一過程,直到有一方獲勝。如圖。圖人機對戰(zhàn)算法流程圖(1) ,電腦搜索棋盤里白棋是否有一步獲勝的棋,即在同一條線路上有連續(xù)五個位 置上,有四顆為白棋,另外一顆為空,這時就不用考慮玩家的棋局,直接就可以獲勝。能 直接獲勝的棋型有xOOOOx> OOOOx,還包括通過四三來形成的活四,包括有 OOxOO>OOOxO>OxOOOo(2) ,電腦搜索棋盤里黑棋是否有一步獲勝的棋,這時就應(yīng)該讓玩家的“活四”變“死四”,這是白棋威脅級別最高的,應(yīng)立即做出反應(yīng)。有直接威脅的棋型有%、'、XXo對于口口口口這種棋型, 其實玩家已經(jīng)獲勝。(3

19、) ,電腦搜索棋盤里白棋是否有可形成活四的棋型,進(jìn)一步?jīng)_四,這時就應(yīng)該主 動進(jìn)攻,這種棋型包括xOOOxx、 xOOxOx、xOxOOx。這樣的棋只需兩步 方可獲勝,威脅級別僅次于上面兩種。(4) ,電腦搜索棋盤里黑棋是否有可形成活四的棋型,若有,就有阻止沖四,讓玩 家的“活三”變死三,這時就體現(xiàn)了電腦的防守策略,這種棋型包括:XXDX'X XX. XXXo其中XXX在封堵后還具有威脅性,所以在電腦沒有 進(jìn)攻機會時,也應(yīng)該考慮這樣的棋型的威脅性,因為可以利用這種棋型來造四三來獲勝。(5) ,電腦搜索棋盤里白棋是否有可形成活三的棋型,這是獲勝的過渡棋,在整個 棋局中非常重要,這樣的棋型越

20、多,白棋造活三的機會就越多,是獲勝的關(guān)鍵。這種棋型包括:xxOOxx、xxOxOx,由于需要三步獲勝,所以優(yōu)先級比較低。表1是獲勝情況分析表,優(yōu)先級是按所需步數(shù)和落棋的順序來決定的, 在獲勝所需步 數(shù)相同的情況下,電腦所執(zhí)的白棋優(yōu)先級高于黑棋。表1獲勝情況分析表棋盤上的情況:獲勝所需步數(shù)優(yōu)先級電腦已有任意組活四或已有任意組死四-一-1玩家已有任意組活四或已有任意組死四-一-2電腦已有任意組活三或已有多于一組的死三-二二3玩家已有一組死三和任意組的活二三4玩家已有任意組活三或已有多于一組的死三三5玩家已有一組死三和任意組的活二三64系統(tǒng)流程五子棋的規(guī)則如下:(1)棋盤:采用15X15的棋盤。(2

21、)下法玩家一執(zhí)黑先手, 電腦或玩家二執(zhí)白后手,輪流在棋盤上選擇一個無子的交叉點落子。 無子的交叉點又被稱 為空點。(3)輸贏判斷:黑、白雙方有一方的 5顆棋子在橫、豎或斜方向上連接成一線 即為該方贏。(4)對于五子棋可分為禁手和無禁手兩類,本游戲采用三三禁手??捎?5X 15的二維數(shù)表示棋盤內(nèi)各點狀態(tài) (空、白子、黑子);五子棋游戲規(guī)則簡單,在每次玩家或電腦落棋后,都要去判斷是否游戲是否分出勝負(fù), 如沒有,另一方才能繼續(xù)下棋。一局游戲結(jié)束后,可以選擇再來一盤,這時將棋盤數(shù)據(jù)清 空,又開始新的棋局。系統(tǒng)流程如圖 2所示。圖5-2系統(tǒng)流程圖5系統(tǒng)功能實現(xiàn)5.1 窗口設(shè)計根據(jù) Windows API

22、 函數(shù)來編寫應(yīng)用程序的順序結(jié)構(gòu):調(diào)用 WinMain 函數(shù)開始執(zhí)行 T定義窗口類一初始化窗口類T窗口的實例化一通過消息循環(huán)獲取消息并將消息發(fā)送給 消息處理函數(shù)做出相應(yīng)的操作。我們首先應(yīng)該創(chuàng)建一個窗口, 生成一個窗口主要有兩步: 定義窗口類和初始化窗口類。 首先用 InitWindowsClass 來定義一個窗口類, 窗口類事實上是 struct 結(jié)構(gòu)體 ,內(nèi)部有 10個分量,他們是用來于初始化窗口類對象而用的。 根據(jù)函數(shù)里聲明的各個參數(shù)來執(zhí)行, 它在里面定義了窗口類對象、 聲明了窗口的類對象名稱、 應(yīng)用程序?qū)嵗浔?消息處理函 數(shù)名、光標(biāo)樣式和窗口背景等,其它的都設(shè)置為初始值。函數(shù)關(guān)鍵語句:

23、 BOOL InitWindowsClass(HINSTANCE hInstance) WndClass.hbrBackground=(HBRUSH)(CreateSolidBrush(RGB(240,240,240);WndClass.hCursor=LoadCursor(NULL,IDC_ARROW) ;WndClass.hInstance=hInstanc;eWndClass.lpfnWndProc=WndProc;WndClass.lpszClassName="WinFill";return RegisterClass(&WndClass;) 然后用 Ini

24、tWindows 函數(shù)來初始化窗口類,在窗口類對象的初始化過程中,我們定 義了窗口的一些簡單一般特征,比如背景顏色呀,光標(biāo)等等。但是在利用 CreateWindow 創(chuàng)建窗口的時候可以設(shè)置更多的細(xì)節(jié),比如窗口標(biāo)題這些。函數(shù)主要參數(shù):hWnd=CreateWindow("WinFill" ,"五子棋游戲 ",WS_OVERLAPPEDWINDOW ,0,0,1024,768,hInstance);其中,定義窗口類對象名稱為 "WinFill" ,窗口標(biāo)題為 " 五子棋游戲 ",窗口風(fēng)格為 WS_OVERLAPPEDW

25、INDOW ,說明此窗口是一個層疊式窗口 ,含有邊框、標(biāo)題欄、系統(tǒng) 菜單、最大最小化按鈕的窗口。5.2 棋盤設(shè)計程序的實現(xiàn)上,首先完成界面的設(shè)計, 在界面的設(shè)計上,使用了二維數(shù)組的棋盤格式, 考慮到五子棋的落子后, 是不會再次移動的, 所以采用劃直線的方法模擬一個棋盤。 棋盤 大小為560X 560,起始坐標(biāo)為(200, 100),每個格子大小為(40, 40)。首先用 GetStockObject 函數(shù)創(chuàng)建一個畫筆和畫刷,用 SelectObject 選擇當(dāng)前使用的 畫筆和畫刷, 畫筆的作用是畫棋盤的邊框及格子, 畫刷的作用是填充棋盤的背景色, 先取 畫筆后我們才能用它來畫棋盤。 為了增加棋

26、盤的美觀, 畫刷顏色選取灰色, 與窗口的銀白 色分開。然后用 Rectangle 函數(shù)畫一個矩形,就是棋盤的邊框,棋盤的左上角坐標(biāo)為( 200, 100),右下角坐標(biāo)為( 760,660)。再畫棋盤的各橫軸及縱軸,在畫每一條直線前,需用 MoveToEx 函數(shù)指定當(dāng)前畫筆 的位置,然后用 LineTo 函數(shù)從指定這點開始畫一條到指定的另外一點的直線。函數(shù)段為: hPen=(HPEN)GetStockObject(BLACK_PEN) ;SelectObject(hDC,hPen);hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH) ;SelectObject

27、(hDC,hBrush);Rectangle(hDC,200,100,760,660;)MoveToEx(hDC,200,140,NULL) ; /第一條橫線在這些都完成了之后, 對界面進(jìn)行最后的完善, 通過添加按鈕來使用戶在和電腦對弈 的同時,可以從這些按鈕中獲得必要的幫助。本系統(tǒng)一共設(shè)置了四個按鈕:“和棋”、“再來一盤”,“退出”和“幫助”。它們 的畫法采用文本框模擬按鈕, 先畫一個矩形, 在矩形里填充提示信息, 用鼠標(biāo)單擊事件來 響應(yīng)各個按鈕。因此綜上所述, 在界面的設(shè)計上,主要有兩個模塊,一個是棋盤模塊,一個是按鈕模 塊。5.3 按鈕功能的實現(xiàn)本系統(tǒng)一共設(shè)置了四個按鈕:“和棋”、“再來

28、一盤”,“退出”和“幫助”。它們 的畫法采用文本框模擬按鈕, 先畫一個矩形, 在矩形里填充提示信息, 用鼠標(biāo)單擊事件來 響應(yīng)各個按鈕。這四個按鈕基本滿足了一般玩家的需求。按鈕的畫法: 先在主函數(shù)里面定義四個變量, 分別存儲按鈕的標(biāo)題, 然后在棋盤外畫 四個矩形,然后在四個矩形里分別顯示按鈕的標(biāo)題。具體實現(xiàn)方法:“退出”按鈕:Rectangle(hDC,770,110,820,135;)TextOut(hDC,780,115,lpsz1,strlen(lpsz1);if(i>770&&i<820&&j>495&&j<520)

29、PostQuitMessage(0);return(0);以上這幾行代碼就實現(xiàn)了退出按鈕按鈕的畫法及實現(xiàn), lpsz1 里存儲的是按鈕標(biāo)題 “退出”,在( 770,110)到( 820,135)這個區(qū)域畫一按鈕, strlen(lpsz1) 求的是字符 串的長度,求出來的值就是文本顯示的長度。當(dāng)鼠標(biāo)單擊這個區(qū)域的時候,就產(chǎn)生消息, 并執(zhí)行 PostQuitMessage(0) 這條語句,這條語句的作用是退出應(yīng)用程序。這樣就模擬出 了一個退出按鈕,實現(xiàn)了程序的退出。“再來一盤”按鈕:Rectangle(hDC,100,325,180,375);TextOut(hDC,110,340,lpsz5,

30、strlen(lpsz5);if(i>=100&&i<=325&&j>=180&&j<=375) /再來一盤for(m=0 ; m<=a;m+)cm=0 ;dm=0 ;em=0;fm=0 ;for(m=0 ; m<=14; m+)for(n=0;n<=14;n+)pmn=0 ;在畫法和退出按鈕一樣, 都是利用矩形內(nèi)填充文本的方法, 在響應(yīng)這個按鈕時有一定 條件,就是游戲已經(jīng)分出勝負(fù)或者通過和棋結(jié)束了游戲。這時才會產(chǎn)生再來一盤的消息, 它會將所有棋盤信息置為初始值,比如將棋盤狀態(tài)函數(shù) P 里的數(shù)組全部清空,

31、都賦初 值為 0,表示下棋棋子數(shù)的 a 也置為 0 等。“幫助”按鈕:Rectangle(hDC,770,110,820,135);TextOut(hDC,780,115,lpsz1,strlen(lpsz1);if(i>=770&&i<=820&&j>=110&&j<=135)MessageBox(hWnd,"需幫助 請在黑棋下棋時單擊幫助'n 一方獲勝后可單擊退出' 退出程序 n 雙方僵持情況下可 '和棋' n 如有興趣請 '再來一盤 '", &quo

32、t;幫助", M B_OK) ; 畫法和前面的一樣, 這里面使用了文本換行, 在每行之間用 n 將需要換行的文字隔 開,于是在單擊這個按鈕后,就會看到有多行文字的消息框出現(xiàn)。5.4 勝負(fù)判斷在五子棋游戲中, 判斷勝負(fù)是很重要的一項工作,最先在棋盤橫向、 豎向、斜向形成 五顆連續(xù)相同顏色的棋子的一方為勝。(1)橫向:橫向比較好判斷,縱坐標(biāo)不變,橫坐標(biāo)向右遞增,有五顆連續(xù)的相同顏 色的棋子即獲勝,所以橫坐標(biāo)的范圍不必是( 0, 14),只搜索( 0, 10)即可。(2)縱向:與橫向一樣,這時橫坐標(biāo)不變,縱坐標(biāo)向下遞增,所以縱坐標(biāo)的搜索范 圍可以縮小到( 0, 10)。(3)“ ”向:這時搜索應(yīng)從左上角開始,橫縱坐標(biāo)同時遞增,橫縱坐標(biāo)的搜索范 圍都是( 0, 10)。(4)“”向:這時縱坐標(biāo)是向下遞增,但橫坐標(biāo)是向左遞減的,所以搜索范圍就 不能從左上角( 0, 0)開始,應(yīng)從( 0, 4)開始,橫坐標(biāo)的搜索范圍是( 4, 14),縱坐 標(biāo)的搜索范圍是( 0, 10)。下面就以“”向為例,在程序中具體實現(xiàn)過程:for(m=0;m<=10;m+)for(n=4;n<=14;n+)if(pmn=1&&pm+1n-1=1&&pm+2n-2=1&&pm+3n-3=1&&p

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論