


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中國礦業(yè)大學應用系統(tǒng)開發(fā)實踐設計題目:基于VC的五子棋游戲軟件的設計與開發(fā)指導教師:學 生:專 業(yè):計算機科學與技術 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 窗口設計 95.2 棋盤設計 95.3 按鈕功能的實現(xiàn) 1.0.5.4 勝負判斷 1.1.6 系統(tǒng)測試與分析 1.3.7 結論
2、1.7.1.引 言目前網絡上有很多五子棋子游戲,玩法簡單,娛樂性也很高。五子棋不僅能增強思維能力,提高 智力,而且富含哲理,有助于修身養(yǎng)性。通過對五子棋的設計與開發(fā),了解和掌握游戲開發(fā)的原理與 方法。讓電腦像人腦一樣思考,一直是人工智能發(fā)展的最終目標。作為一門邊緣學科,它有諸多的研 究領域,博弈即為其中之一。博弈的參加者可以是個人、集體、某種生物或機器,他們都力圖用自己 的“智力”去擊敗對手。博弈為人工智能提供了一個極好的試驗場所,人工智能中的許多概念和方法都 是從博弈程序中提煉出來的,人工智能中大多以下棋為例來研究博弈規(guī)律。本文以五子棋為入口,設 計了一個五子棋雙人對戰(zhàn)和人機對弈系統(tǒng),以實現(xiàn)
3、人和人,人和計算機的博弈,最終的目的是為了建 立一個有具體規(guī)則的五子棋平臺。2.需求分析目前網絡上有很多五子棋子游戲, 玩法簡單,娛樂性也很高。 五子棋不僅能增強思維 能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。通過對五子棋的設計與開發(fā),了解和 掌握游戲開發(fā)的原理與方法。讓電腦像人腦一樣思考,一直是人工智能發(fā)展的最終目標。 作為一門邊緣學科, 它有諸多的研究領域, 博弈即為其中之一。 博弈的參加者可以是個人、 集體、某種生物或機器,他們都力圖用自己的 “智力 ”去擊敗對手。人機對弈程序的要點, 至少應具備以下 4 個部分: (1) 狀態(tài)表示:某種在機器中表示棋局的方法,能夠讓程序知 道博弈的
4、狀態(tài)。 (2) 走法產生:產生合法走法的規(guī)則,以使博弈公正地進行,并可判斷對 手是否亂走。 (3)搜索技術:從所有合法的走法中選擇最佳的走法技術。 (4) 對弈界面。2.1 系統(tǒng)需求五子棋作為一款休閑益智游戲, 它最大的優(yōu)點在于游戲規(guī)則家喻戶曉, 簡單,上手快, 趣味性強,所以受廣大用戶青睞, 在各大提供棋牌類游戲的平臺都可以看到玩五子棋游戲 的人很多。 休閑益智游戲中等級并不是最重要的追求目標, 通過對游戲規(guī)則的熟悉, 能很 快上手掌握其操作方式,也更適合男女老幼全家共同娛樂,花費時間簡短,速戰(zhàn)速決, 在 短時間內感受到游戲的樂趣, 完全享受氣氛輕松活躍的游戲過程。 此種娛樂方式既不耽誤 時
5、間也能輕松調劑娛樂, 充分適合現(xiàn)代人們的娛樂需求。 更主要的是開發(fā)了人的智力, 成 為年輕一代最流行的游戲, 據統(tǒng)計,五子棋游戲的玩家中, 學生占了接近三分之一的比例, 對學生的智力健康成長起一定作用,正所謂休閑娛樂兩不誤。2.2 功能需求要求系統(tǒng)界面簡潔, 操作方便,把五子棋游戲規(guī)則中最基本的規(guī)則體現(xiàn)出來, 比如“和 棋”、“重新開局”等。五子棋還有一大特點就是速戰(zhàn)速決,電腦應在很短時間內就應做 出判斷,并能提供一定的幫助,違反游戲規(guī)則的時候應立即指出。在正規(guī)五子棋比賽中, 都設置了“禁手”這一規(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)性。 它既有簡 單易學的特性, 為人民群眾所喜聞樂見, 又有深奧的技巧和高水平的國際性比賽; 它的棋 文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。 它是中西文化
7、的交流點,是古今哲理的結晶。五子棋起源于古代中國, 發(fā)展于日本,風靡于歐洲。對于它與圍棋的關系有兩種說法, 一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲; 一說源于圍棋,是圍棋 發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同, 縱橫各十七道。 五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、 日本等地。 據日本 史料文獻介紹,中國古代的五子棋是經由高麗 (朝鮮),于 1688年至 1704年的日本元祿 時代傳到日本的。到日本明治 32 年(公元 1899年) ,經過公開征名, “連珠”這一名稱 才被正式確定下來, 取意于“日月如合壁,五星如連珠”。從此
8、,連珠活動經過了不斷的 改良,主要是規(guī)則的變化(即對執(zhí)黑棋一方的限制),例如, 1899 年規(guī)定,禁止黑白雙 方走“雙三”; 1903 年規(guī)定,只禁止黑方走“雙三”; 1912年規(guī)定,黑方被迫走“雙三” 亦算輸; 1916 年規(guī)定,黑方不許走“長連”; 1918 年規(guī)定,黑方不許走“四、三、三”; 1931年規(guī)定,黑方不許走“雙四”,并規(guī)定將 19X 19的圍棋盤改為15X15的連珠專用 棋盤。本世紀初五子棋傳入歐洲并迅速風靡全歐。 通過一系列的變化, 使五子棋這一簡單 的游戲復雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋, 同時也成為一種國際比賽棋。簡單介紹一下文章中會遇到的一些關于五子棋最
9、基本的術語(1)先手:進攻的著法,也指對弈雙方執(zhí)黑棋先在棋盤上落子的一方;(2)四三:指同時具備兩個先手,其中一個四,另一個是活三;(3)活三(包括連三和跳三):連三:緊緊相連的同色三子跳三:中間間隔一子 的活三 ;(4) 四四:一子落下同時形成兩個“四”的棋形;( 5)三三:一子落下形成了兩個活三的棋形;(6)長連:相同顏色的連續(xù)六子或六子以上;(7)禁手:對局中禁止使用的戰(zhàn)術或被判為負的行棋手段;(8)勝局:對局的一方獲勝,稱為“勝局”。包括:一方首先在棋盤的直線或橫 線或斜線上形成連續(xù)的五子或五子以上 (特指白方)。對方表示認輸。對方超過比賽 規(guī)定的時限。 當黑方禁手形成未能同時形成五連
10、, 白方立即指出禁手后, 判定為白方勝 局。對方遲到超過容許時間。對方嚴重犯規(guī)而被判負;(9)和棋:不分勝負的對局或雙方同意平局。3.2 五子棋的規(guī)則五子棋游戲的一個特點是先行的一方優(yōu)勢很大, 因此在職業(yè)比賽中對黑方做了種種限 制,以利公平競爭。五子棋的比賽規(guī)則如下:(1)黑棋先手、白棋后手,從天元開始相互順序落子;(2)最先在棋盤橫向、縱向或斜向形成連續(xù)的同色五個棋子的一方為勝;(3)黑棋禁手判負、白棋無禁手。黑棋禁手有“三、三”、“四、四”和“長連”, 包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取勝;(4)如分不出勝負,則到為平局;(5)五連與禁手同時形成,判勝;(6)黑方禁
11、手形成時,白方應立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指出,反而 繼續(xù)落子,則禁手失效,不再判黑方負。五子棋是黑白雙方或兩個人之間的競技活動, 由于對黑白雙方規(guī)則不同, 黑棋必須先 行。一般采用猜先的方法來決定誰執(zhí)黑先行, 即雙方各抓一種顏色的幾枚棋子, 大數(shù)減小 數(shù),單數(shù)雙方交換, 偶數(shù)不換;黑方在落下關鍵的第五子即形成五連的同時,如又形成禁 手,此時因黑方已經成五,而“五”在五子棋中是至高無上的,故禁手失效,黑方勝;所 謂黑方形成禁手, 是指黑方落下一子同時形成兩個或兩個以上的活三、 沖四及長連等。 此 時白方應立即指出,自然而勝。專業(yè)連珠五子棋雖然對黑棋采取了種種限制,但是黑棋先行的優(yōu)勢依
12、然很大。因此, 在高段位的專業(yè)比賽中,又出現(xiàn)了三種特殊的規(guī)定:(1)“指定打法”:指比賽雙方按照約定好的開局進行對弈。例如“斜月局”、 “長 星局”等。(2)“三手可交換”:指黑棋下第二手棋盤面第三手棋之后,白方如感覺黑方 棋形不利于己方, 可提出交換, 即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方 此方法不適用于指定開局 打法,而用于隨意開局。采用此規(guī)定以后,黑棋就不會再使用諸如“浦月”、“花月” 之類的必勝開局了。(3)“五手兩打”:指黑棋在下盤面上關鍵的第五手棋時,必須下兩步棋,讓白方 在這兩步棋中任選一步,然后再繼續(xù)下。采用這一系列規(guī)定以后,黑棋先行就再無優(yōu)勢可言。3.3 具體算法分析棋盤局勢狀態(tài)表示
13、棋盤表示主要探討的是是什么數(shù)據結構來表示棋盤上的信息。 一般說來, 這與具體的 棋類知識密切相關。通常,用來描述棋盤及其上棋子信息的是一個二維數(shù)組。要讓計算機知道棋盤局勢狀態(tài), 就是要它記住棋盤中哪個位置有黑子, 哪個位置有白 子以及哪個位置是空點。因為五子棋的棋盤是 15 行,15 列,因此可以將棋盤狀態(tài)的描述 用一個15X 15的二維數(shù)組表示。本程序的數(shù)據將用如下所示的數(shù)據表示: 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ù)據由一個15X 15的二維數(shù)組表示。(2)用數(shù)字“ 1”和“2” 來表示不同的棋子,黑色棋子用“ 2”表示,白色棋子用“ 1”表示。( 3)沒有棋子的格 子用“ 0”表示。3.3.2 棋盤中下棋的順序表示棋局中下棋的順序也很重要,應該是黑白雙方交替下棋。本程序用 t 來判斷黑白雙方下棋順序, t 為“0”時由白方下棋, t 為“1”時由黑方下 棋,由于五子棋規(guī)則中黑棋先手,所以初始值 t=1,即玩家執(zhí)黑先手。每次落棋后,都應 改變 t 的值, t 在整個對
16、弈過程中都只能為 1 或者為 0,即在任意時刻,都有一方可以落 棋,也只能有一方落棋。3.3.3 具體算法本系統(tǒng)中較復雜的部分是人機對戰(zhàn)部分。 下面將簡單分析人機對戰(zhàn), 雙人對戰(zhàn)則省略。 電腦要選擇有利于它的最佳下法, 就要能判斷哪種形勢對它最有利。 但往往對一個形勢的 判斷是很難做到準確的, 特別是一盤棋剛開始的時候, 棋盤的形勢不明朗, 即使是專家也 不能做出準確的判斷。 為了判斷哪種下法最有利, 我們往往需要向后面計算幾步, 看看在 走了幾步棋之后,局面的形勢如何。這被稱為“多算勝”,也就是說,誰看得越深遠,誰 就可以獲勝。這種思維方式被用到了計算機上。 向后面計算的步數(shù)越多, 系統(tǒng)開銷
17、就越大, 本系統(tǒng)只向后計算一步,根據威脅的優(yōu)先級來選擇落棋的最佳點。輪到電腦下棋時, 電腦先向棋盤搜索合法的落棋點, 即棋盤的空白點。 然后再利用下 面的算法先擇最佳落棋點。在每個空白點,都有四個方向需要考慮,即一、卜、/四個方向。以下就用O表示電腦所執(zhí)的黑棋,用表示玩家所執(zhí)的白棋,用X表示棋盤的空 白點。在設計的時候, 盡可能把所有情況全面考慮, 設置為搜索一個最佳落棋點位置的時 候,需要保證左右展開后碰壁, 之間的空間距離至少要有六格 (而不是五子 ) ,否則就是死 子。人機對戰(zhàn)算法流程是:順序向下搜索,每次有符合要求的點時,視為最佳落棋點, 并 在該點落棋,同時將t賦值為1,退出搜索并判
18、斷是否有一方獲勝,然后等待玩家落棋, 再重復這一過程,直到有一方獲勝。如圖。圖人機對戰(zhàn)算法流程圖(1) ,電腦搜索棋盤里白棋是否有一步獲勝的棋,即在同一條線路上有連續(xù)五個位 置上,有四顆為白棋,另外一顆為空,這時就不用考慮玩家的棋局,直接就可以獲勝。能 直接獲勝的棋型有xOOOOx> OOOOx,還包括通過四三來形成的活四,包括有 OOxOO>OOOxO>OxOOOo(2) ,電腦搜索棋盤里黑棋是否有一步獲勝的棋,這時就應該讓玩家的“活四”變“死四”,這是白棋威脅級別最高的,應立即做出反應。有直接威脅的棋型有%、'、XXo對于口口口口這種棋型, 其實玩家已經獲勝。(3
19、) ,電腦搜索棋盤里白棋是否有可形成活四的棋型,進一步沖四,這時就應該主 動進攻,這種棋型包括xOOOxx、 xOOxOx、xOxOOx。這樣的棋只需兩步 方可獲勝,威脅級別僅次于上面兩種。(4) ,電腦搜索棋盤里黑棋是否有可形成活四的棋型,若有,就有阻止沖四,讓玩 家的“活三”變死三,這時就體現(xiàn)了電腦的防守策略,這種棋型包括:XXDX'X XX. XXXo其中XXX在封堵后還具有威脅性,所以在電腦沒有 進攻機會時,也應該考慮這樣的棋型的威脅性,因為可以利用這種棋型來造四三來獲勝。(5) ,電腦搜索棋盤里白棋是否有可形成活三的棋型,這是獲勝的過渡棋,在整個 棋局中非常重要,這樣的棋型越
20、多,白棋造活三的機會就越多,是獲勝的關鍵。這種棋型包括: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ù)表示棋盤內各點狀態(tài) (空、白子、黑子);五子棋游戲規(guī)則簡單,在每次玩家或電腦落棋后,都要去判斷是否游戲是否分出勝負, 如沒有,另一方才能繼續(xù)下棋。一局游戲結束后,可以選擇再來一盤,這時將棋盤數(shù)據清 空,又開始新的棋局。系統(tǒng)流程如圖 2所示。圖5-2系統(tǒng)流程圖5系統(tǒng)功能實現(xiàn)5.1 窗口設計根據 Windows API
22、 函數(shù)來編寫應用程序的順序結構:調用 WinMain 函數(shù)開始執(zhí)行 T定義窗口類一初始化窗口類T窗口的實例化一通過消息循環(huán)獲取消息并將消息發(fā)送給 消息處理函數(shù)做出相應的操作。我們首先應該創(chuàng)建一個窗口, 生成一個窗口主要有兩步: 定義窗口類和初始化窗口類。 首先用 InitWindowsClass 來定義一個窗口類, 窗口類事實上是 struct 結構體 ,內部有 10個分量,他們是用來于初始化窗口類對象而用的。 根據函數(shù)里聲明的各個參數(shù)來執(zhí)行, 它在里面定義了窗口類對象、 聲明了窗口的類對象名稱、 應用程序實例句柄、 消息處理函 數(shù)名、光標樣式和窗口背景等,其它的都設置為初始值。函數(shù)關鍵語句:
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ù)來初始化窗口類,在窗口類對象的初始化過程中,我們定 義了窗口的一些簡單一般特征,比如背景顏色呀,光標等等。但是在利用 CreateWindow 創(chuàng)建窗口的時候可以設置更多的細節(jié),比如窗口標題這些。函數(shù)主要參數(shù):hWnd=CreateWindow("WinFill" ,"五子棋游戲 ",WS_OVERLAPPEDWINDOW ,0,0,1024,768,hInstance);其中,定義窗口類對象名稱為 "WinFill" ,窗口標題為 " 五子棋游戲 ",窗口風格為 WS_OVERLAPPEDW
25、INDOW ,說明此窗口是一個層疊式窗口 ,含有邊框、標題欄、系統(tǒng) 菜單、最大最小化按鈕的窗口。5.2 棋盤設計程序的實現(xiàn)上,首先完成界面的設計, 在界面的設計上,使用了二維數(shù)組的棋盤格式, 考慮到五子棋的落子后, 是不會再次移動的, 所以采用劃直線的方法模擬一個棋盤。 棋盤 大小為560X 560,起始坐標為(200, 100),每個格子大小為(40, 40)。首先用 GetStockObject 函數(shù)創(chuàng)建一個畫筆和畫刷,用 SelectObject 選擇當前使用的 畫筆和畫刷, 畫筆的作用是畫棋盤的邊框及格子, 畫刷的作用是填充棋盤的背景色, 先取 畫筆后我們才能用它來畫棋盤。 為了增加棋
26、盤的美觀, 畫刷顏色選取灰色, 與窗口的銀白 色分開。然后用 Rectangle 函數(shù)畫一個矩形,就是棋盤的邊框,棋盤的左上角坐標為( 200, 100),右下角坐標為( 760,660)。再畫棋盤的各橫軸及縱軸,在畫每一條直線前,需用 MoveToEx 函數(shù)指定當前畫筆 的位置,然后用 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) ; /第一條橫線在這些都完成了之后, 對界面進行最后的完善, 通過添加按鈕來使用戶在和電腦對弈 的同時,可以從這些按鈕中獲得必要的幫助。本系統(tǒng)一共設置了四個按鈕:“和棋”、“再來一盤”,“退出”和“幫助”。它們 的畫法采用文本框模擬按鈕, 先畫一個矩形, 在矩形里填充提示信息, 用鼠標單擊事件來 響應各個按鈕。因此綜上所述, 在界面的設計上,主要有兩個模塊,一個是棋盤模塊,一個是按鈕模 塊。5.3 按鈕功能的實現(xiàn)本系統(tǒng)一共設置了四個按鈕:“和棋”、“再來
28、一盤”,“退出”和“幫助”。它們 的畫法采用文本框模擬按鈕, 先畫一個矩形, 在矩形里填充提示信息, 用鼠標單擊事件來 響應各個按鈕。這四個按鈕基本滿足了一般玩家的需求。按鈕的畫法: 先在主函數(shù)里面定義四個變量, 分別存儲按鈕的標題, 然后在棋盤外畫 四個矩形,然后在四個矩形里分別顯示按鈕的標題。具體實現(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 里存儲的是按鈕標題 “退出”,在( 770,110)到( 820,135)這個區(qū)域畫一按鈕, strlen(lpsz1) 求的是字符 串的長度,求出來的值就是文本顯示的長度。當鼠標單擊這個區(qū)域的時候,就產生消息, 并執(zhí)行 PostQuitMessage(0) 這條語句,這條語句的作用是退出應用程序。這樣就模擬出 了一個退出按鈕,實現(xiàn)了程序的退出?!霸賮硪槐P”按鈕: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 ;在畫法和退出按鈕一樣, 都是利用矩形內填充文本的方法, 在響應這個按鈕時有一定 條件,就是游戲已經分出勝負或者通過和棋結束了游戲。這時才會產生再來一盤的消息, 它會將所有棋盤信息置為初始值,比如將棋盤狀態(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 勝負判斷在五子棋游戲中, 判斷勝負是很重要的一項工作,最先在棋盤橫向、 豎向、斜向形成 五顆連續(xù)相同顏色的棋子的一方為勝。(1)橫向:橫向比較好判斷,縱坐標不變,橫坐標向右遞增,有五顆連續(xù)的相同顏 色的棋子即獲勝,所以橫坐標的范圍不必是( 0, 14),只搜索( 0, 10)即可。(2)縱向:與橫向一樣,這時橫坐標不變,縱坐標向下遞增,所以縱坐標的搜索范 圍可以縮小到( 0, 10)。(3)“ ”向:這時搜索應從左上角開始,橫縱坐標同時遞增,橫縱坐標的搜索范 圍都是( 0, 10)。(4)“”向:這時縱坐標是向下遞增,但橫坐標是向左遞減的,所以搜索范圍就 不能從左上角( 0, 0)開始,應從( 0, 4)開始,橫坐標的搜索范圍是( 4, 14),縱坐 標的搜索范圍是( 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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務合同兼職合同范本
- 分包制作安裝合同范本
- 借款車位轉讓合同范本
- 代理房屋合同范本
- 2024年玉環(huán)市委辦公室選聘考試真題
- 2024年舟山市定海區(qū)人民檢察院招聘用工人員筆試真題
- 關于電纜合同范本
- 2024年玉林市第十一中學招聘高中體育頂崗教師筆試真題
- 個人經營服務合同范本
- 借款房屋轉讓合同范本
- 建筑裝飾工程施工總平面布置圖
- 鐵路基本建設工程設計概(預)算編制辦法-國鐵科法(2017)30號
- 顏真卿《勸學》ppt課件1
- 1+X證書制度試點工作報告
- 2021年北京市石景山區(qū)中考語文一模試卷
- 特種設備安全技術檔案(附表格)
- 國網新聞宣傳與企業(yè)文化管理專責考試題庫及答案
- 三年級地方課教案
- 涉外法律文書寫作
- 2022-2023學年湖南省長沙市統(tǒng)招專升本語文模擬練習題三及答案
- 社會救助法課件
評論
0/150
提交評論