




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目 錄 一、摘要:. 1二、關(guān)鍵字:. 1三、程序主流程圖. 2四、需求分析:. 3五、關(guān)鍵部分設(shè)計算法及實(shí)現(xiàn):. 4六、文件清單:. 9七、使用說明:. 9八、參考書目:. 10九、附錄:(源代碼清單). 11 五子棋程序一、 摘要: 五子棋游戲是一歷史悠久,對抗性強(qiáng),技巧性高的棋類游戲。本文用VC 6.0設(shè)計了五子棋游戲。并就以下問題進(jìn)行了探討:(1) 棋子棋盤在程序中的表示;(2) 如何通過鼠標(biāo)點(diǎn)擊落子;(3) 如何判斷輸贏,在棋盤的,|,/,四個方向進(jìn)行搜索,超過5子以上連成一線則認(rèn)為贏了。(4) 如何實(shí)現(xiàn)梅棋功能。(5) 如何保存并讀入棋譜;(6) 如何讓電腦擁有人類的智慧;(7) 編寫軟件代碼應(yīng)遵守的編寫規(guī)范,成對編碼原則和代碼的注釋;(8) 其它未詳盡處,請參看源代碼。 二、關(guān)鍵字:棋盤數(shù)組搜索算法人工智能活半活雙活三 三、程序主要類結(jié)構(gòu)圖 CfiveStoneApp 四、需求分析:五子棋歷史源遠(yuǎn)流長,發(fā)展形勢喜人,以下在網(wǎng)絡(luò)上一篇有關(guān)五子棋歷史發(fā)展的報道: 五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一?,F(xiàn)代五子棋日文稱之為“連珠”,英譯為“Renju”,英文稱之為“Gobang”或“FIR”(Five in a Row的縮寫),亦有“連五子”、“五子連”、“串珠”、“五目”、“五目碰”、“五格”等多種稱謂。?五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。? 五子棋起源于古代中國,發(fā)展于日本,風(fēng)靡于歐洲。對于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在“堯造圍棋”之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。古代的五子棋的棋具與圍棋相同,縱橫各十七道。五子棋大約隨圍棋一起在我國南北朝時先后傳入朝鮮、日本等地。據(jù)日本史料文獻(xiàn)介紹,中國古代的五子棋是經(jīng)由高麗(朝鮮),于1688年至1704年的日本元祿時代傳到日本的。到日本明治32年(公元1899年),經(jīng)過公開征名,“連珠”這一名稱才被正式確定下來,取意于“日月如合壁,五星如連珠”。從此,連珠活動經(jīng)過了不斷的改良,主要是規(guī)則的變化(即對執(zhí)黑棋一方的限制),例如,1899年規(guī)定,禁止黑白雙方走“雙三”;1903年規(guī)定,只禁止黑方走“雙三”;1912年規(guī)定,黑方被迫走“雙三”亦算輸;1916年規(guī)定,黑方不許走“長連”;1918年規(guī)定,黑方不許走“四、三、三”;1931年規(guī)定,黑方不許走“雙四”,并規(guī)定將1919的圍棋盤改為1515的連珠專用棋盤。本世紀(jì)初五子棋傳入歐洲并迅速風(fēng)靡全歐。通過一系列的變化,使五子棋這一簡單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時也成為一種國際比賽棋。? 目前,職業(yè)連珠已迅速在國際上發(fā)展起來。1988年8月8日,國際連珠聯(lián)盟(RIF)由日本、俄羅斯、瑞典、亞美尼亞、阿塞拜疆、愛沙尼亞、法國、拉脫維亞、白俄羅斯等9個成員國在瑞典宣告創(chuàng)立,我國于1996年正式加入國際連珠聯(lián)盟,現(xiàn)在全世界已有47個國家和地區(qū)成為國際連珠聯(lián)盟的正式會員。職業(yè)連珠的世界錦標(biāo)賽從1989年起每兩年舉辦一次,現(xiàn)已舉辦了六屆,第三、五、六屆的冠軍是愛沙尼亞人,其余三屆的冠軍都是日本人。我國最好成績是團(tuán)體第七,個人張進(jìn)宇第9名。就水平而言,目前以俄羅斯、日本、瑞典最強(qiáng),其中日本研究也最深,我國只處于中等水平。日本擁有自己的五子棋職業(yè)棋手,并且對連珠技術(shù)的研究也相當(dāng)普遍和全面。日本每年舉行連珠名人戰(zhàn)。? 五子棋的根在中國,有著廣泛的群眾基礎(chǔ)。但與世界先進(jìn)的五子棋技術(shù)相比,我們的棋藝水平還很低,所以我們要推廣五子棋,宣傳五子棋,爭取在較短的時間內(nèi)趕上和超過世界五子棋壇的先進(jìn)水平。1990年,由那威和十幾名五子棋愛好者,共同發(fā)起并成立了中國第一個現(xiàn)代職業(yè)五子棋的民間組織-京都五子棋隊,現(xiàn)已發(fā)展成為擁有百余名選手的北京京都五子棋隊。日本連珠聯(lián)盟曾多次派代表團(tuán)訪問中國,與中國廣大愛好者進(jìn)行交流和友誼比賽,瑞典連珠聯(lián)盟也于1995年派代表團(tuán)訪問了中國,京都五子棋隊曾兩次選派選手代表中國參加世界杯比賽,取得此成績反映了我國五子棋水平在世界上所處的位置,同時也顯示了我國在此項(xiàng)運(yùn)動中的發(fā)展?jié)摿Α?997年5月北京成功地舉辦了第一屆“康柏杯”國際五子棋名人邀請賽,引起了國際棋聯(lián)的極大重視,并在第四十四屆棋聯(lián)會議上提出:“中國作為五子棋的發(fā)源國,不僅回到了國際大家庭中來,更重要的是對五子棋在下個世紀(jì)的發(fā)展起到了世界性的推動作用,并將為國際連珠棋成為奧運(yùn)項(xiàng)目做出貢獻(xiàn)?!? 隨著1996年中央電視臺(CCTV-5)黑白世界五子棋講座的開播和中國五子棋網(wǎng)上比賽(/wuziqi/)的開通,將世界連珠五子棋運(yùn)動的最新狀況及時展現(xiàn)在眼前,為五子棋愛好者提供了盡情參與的機(jī)會,這無疑對國內(nèi)的普及、發(fā)展起到了推動的作用。北京連珠五子棋體育文化交流中心已擁有了22位國際段位棋手,他們肩負(fù)著新的歷史使命,不斷為中國五子棋愛好者提供立足國內(nèi)、面向世界、一展才華的機(jī)會。我國于1998年8月成功地舉辦了第二屆世界杯青少年錦標(biāo)賽,1999年7月在北京舉辦了第六屆世界杯冠軍賽,2000年將舉辦第三屆世界杯團(tuán)體賽。在北京的帶動下,全國其他地區(qū)也先后成立了五子棋組織。河北廊坊地區(qū)成立了廊坊五子棋協(xié)會;天津市成立了由天津市體委領(lǐng)導(dǎo)的天津市五子棋工作委員會;上海、云南、杭州等地也都成立了五子棋的組織。五子棋的發(fā)展在中國出現(xiàn)方興未艾之勢。? 一位哲人說過:“中國人的智慧火種,往往使外國人得以燎原,反過來,燎原的火焰必將照亮火種的源頭?!?如上文所述,五子棋既簡單易學(xué),又有其內(nèi)涵和深度;集娛樂性和對抗性為一體,是一款為老、少、中各年齡階段的人所喜歡的棋類游戲。五、關(guān)鍵部分設(shè)計算法及實(shí)現(xiàn):系統(tǒng)地將五子棋程序完成,是有一定難度的?,F(xiàn)將其關(guān)鍵部分的實(shí)現(xiàn)過程描述如下:1、 如何表示棋盤棋子。五子棋棋盤由15*15橫豎線交叉繪制而成,落子點(diǎn)在橫豎的交叉點(diǎn)上。采用15*15的二維數(shù)組表示棋盤,每個數(shù)組元素表示一個交叉點(diǎn),用數(shù)組的值表示棋子:以0表示未落子;以1表示黑子;以2表示白子。 注:在程序中棋盤數(shù)組在FIVE.H中定義,是一全局?jǐn)?shù)組;long FiveChess1515;在主程序FIVE.C中初始化:for(int I=0;I15;I+) for(int j=0;j15;j+) FiveChessIj=0; 剛開始時棋盤中未落一子,故全部交叉點(diǎn)為0。 2、 如何用鼠標(biāo)落子。算法:當(dāng)程序在棋盤上點(diǎn)擊一次后,捕獲這個鼠標(biāo)點(diǎn)擊位置,如果這個點(diǎn)的位置在棋盤在棋盤范圍內(nèi),則認(rèn)可這一鼠標(biāo)點(diǎn)擊,否則,則認(rèn)為這次鼠標(biāo)點(diǎn)擊無效。若鼠標(biāo)點(diǎn)擊在棋盤范圍之內(nèi),則還要進(jìn)一步判斷, 在這個位置是否已經(jīng)落下了子,如果是也認(rèn)為此次點(diǎn)擊無效,如不是,則在棋盤數(shù)組填寫相應(yīng)的數(shù)據(jù)(或1或2),并相應(yīng)的位置畫出一個棋子。具體實(shí)現(xiàn):當(dāng)用戶在程序窗口點(diǎn)擊一次鼠標(biāo)后,松開后,進(jìn)入窗口過程的消息分支WM_LBUTTONUP;在這個消息中的參數(shù)lParam中帶有鼠標(biāo)點(diǎn)擊松開時的位置(x坐標(biāo),y縱坐標(biāo)),放到一個用POINT定義的結(jié)構(gòu)中:POINT pp;pp.x=LOWORD(lParam); /x 縱坐標(biāo)pp.y=LOWORD(lParam);/y 縱坐標(biāo) 接下來判定點(diǎn)擊坐標(biāo)是否超出棋盤范圍,在程序中,棋盤范圍在窗口的(30,30,402,402)這個矩形范圍中。故用下面語句判斷是否越位。If(pp.x30|pp.y402|pp.y402) break;/超出范圍而退出,等待下一次按鍵落子。 下一步:POINT ArrayPp=PositionToPosition(pp);把剛才棋盤范圍內(nèi)的有效點(diǎn)擊屏幕坐標(biāo)轉(zhuǎn)為棋盤數(shù)組坐標(biāo), 0 1 2 3 4 5 6 7 8 9 10 11 12 13 1450,50 400,400 例:100,100轉(zhuǎn)化成棋盤數(shù)組為1,1再對剛才ArrayPp所表示的棋盤位置進(jìn)行判斷是否有子;if(FiveChessArrayPp.x ArrayPp.y!=0) break;/退出,等待下一次按鍵如無子,則在相應(yīng)的棋盤數(shù)組中填寫數(shù)據(jù): FiveChessArrayPp.x ArrayPp.y=1;或 FiveChessArrayPp.x ArrayPp.y=2; 并在相應(yīng)的位置畫好棋子;hdc1=GetDC(hWnd); hMemDc1=CreateCompatibleDC(hdc1); SelectObject(hMemDc1,hBlack); /黑子 SelectObject(hMemDc1,hWhite);/白子 BitBlt(hdc1,pp.x,pp.y,24,24,hMemDc1,0,0,SRCCOPY); DeleteDC(hMemDc1); ReleaseDC(hWnd,hdc1);3、 如何判輸贏;算法:每下一子則在、四個方向搜索一次,如果有五顆或五顆同一色棋子在同一線上,則判該方勝。搜索算法如下:置開始點(diǎn)和終止點(diǎn)坐標(biāo)POINT start,end;都初始化為該點(diǎn)位置; while(start上面一個位置不為空或異色子) start=上面的位置坐標(biāo); while(end下面一個位置不為空或異色子) start=下面的位置坐標(biāo);注: 左面為上面,右面為下面; | 上面為上面,下面為下面; / 上面為上面,下面為下面; 上面為上面,下面為下面; 如果end 與start之間位置大于等于5,則認(rèn)為該方贏。具體實(shí)現(xiàn):見KERNEL.H中SEARCH()函數(shù),則函數(shù)返回50,則表示贏了。 4、 如何實(shí)現(xiàn)悔棋功能和撤消悔棋功能:悔棋一步算法:首先設(shè)置好一全局?jǐn)?shù)組,每下一步棋把相應(yīng)的位置記錄在該數(shù)組中,悔棋時只需要把該數(shù)組最后一次記錄的位置所對應(yīng)的棋盤數(shù)組中的值置為0,然后再根據(jù)棋盤數(shù)組中的數(shù)組,重復(fù)繪制一次棋盤棋子即可。撤消悔棋算法:同樣定義一個全局?jǐn)?shù)組,上面悔棋過程中每悔一步,把悔棋的位置記到該數(shù)組,撤消悔棋只需要把最后一次記錄的撤消悔棋數(shù)組所對應(yīng)的棋盤數(shù)組置為1或2即可。具體實(shí)現(xiàn):見FIVE.H中MAINWNDPROC()中的IDM_OPERATE_PREVIOR:分支(悔棋一步)IDM_OPERATE_BACK:分支(撤消悔棋)5、 如何保存并讀入棋譜。算法: 保存棋譜:由于棋子的所有信息都保存在棋盤數(shù)組中,所以只需要把棋盤數(shù)組中內(nèi)容存儲進(jìn)文件即可。 讀入棋譜:與前面相反,把文件中的數(shù)據(jù)讀進(jìn)棋盤組中,然后要求程序根據(jù)新棋盤數(shù)組的內(nèi)容重繪一次即可。具體實(shí)現(xiàn):見FIVE.H 中的OPEN_CHESS_FAMILY()和SAVE_CHESS_FAMILY()6、五子棋中的人工智能:1)首先定義兩個數(shù)組用于表示每個未下的點(diǎn)的重要程度(用數(shù)字區(qū)別這個重要程度):兩個數(shù)組分別定義為:BlackSituation15155/表示白子(在下棋的時候可以敵方,也可以代表已方)WhiteSituation15155/表示黑子(在下棋的時候可以敵方,也可以代表已方)1515表示有15*15個點(diǎn)后面的5表示每個點(diǎn)有四個方向和一個匯總數(shù)據(jù)(0),分別是(橫1),|(豎2),/(斜線3),(反叛斜線4);例如:(見圖,見表)(1) 在(5,7)這個點(diǎn)落一子,橫方向(對于黑子)只能構(gòu)成成一個活一,故BlackSituation571=4;(2) 而(5,7)這個點(diǎn)上落一子,豎方向(對于黑子)能構(gòu)成一個活四,故BlackSituation572=16384;(3) 而(5,7)這個點(diǎn)上落一子,橫方向(對于白子)能構(gòu)成一個活一,故BlackSituation572=4;(4)而(5,7)這個點(diǎn)上落一子,反斜線方向(對于白子)能構(gòu)成一個活二,活 半活 5 262144 5 65536 4 16384 4 4096 3 1024 3 256 2 64 2 16 1 4 1 1 修正數(shù)據(jù) 雙活三 修正值 說明 10000 大于半活四 故BlackSituation572=64;其它以此類推。2)按這個規(guī)則把所求的各個方向值匯總到BlackSituaitonxy0,WhiteSituaitonxy0中。3)然后把BlackSituaitonxy0和WhiteSituaitonxy0相加, 得到一個總的數(shù)值。 4)在BlackSituationxy0和WhiteSituaitonxy0相加的結(jié)果中, 選出最大的值,其坐標(biāo)為作為電腦下子點(diǎn)。這個數(shù)字,即包括了進(jìn)攻也包括了防守。因?yàn)檫@個數(shù)字把對于敵人和對于自己的重要程度都考慮進(jìn)去了。5)為了個別特別的情況,還特別設(shè)了修正值,見表。 7、編寫軟件代碼應(yīng)遵守的規(guī)范格式,成對編碼原則和代碼的注釋;當(dāng)寫程序?qū)懙骄哂幸欢ㄒ?guī)模的程序時,還有許多非程序語言與算法所能解決的問題,以下我在編寫程序的過程中的一些體會。(1) 成對編碼正確的程序設(shè)計思路是成對編碼,先寫上面的大括號,然后馬上寫下面的大括號。這樣一個函數(shù)體就形成了。它沒有任何問題。然后,比如你要寫個for循環(huán),這時候先申明一個變量I,再寫這個for循環(huán)。寫上面的大括號,馬上寫下面的大括號,然后再在中間插一二行代碼。插這段代碼后,如果你又要用到新變量,則再在頭上添加新變量,然后再讓它進(jìn)行工作。這就是種成對編碼。當(dāng)你用到一個內(nèi)存的時候,寫一個分配函數(shù)分配一塊內(nèi)存,馬上就接著寫釋放這塊內(nèi)存的代碼。然后你再在中間插上你要用這個內(nèi)存做什么。這是正確的快迅的編程方法。否則,你去查或調(diào)試代碼都無從下手。針對這個程序來說,如果用成對編碼,則它任何時候
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育助力醫(yī)藥冷鏈行業(yè)持續(xù)發(fā)展的人才戰(zhàn)略
- 技術(shù)支持下的現(xiàn)代教育管理與評估系統(tǒng)建設(shè)
- 教育行業(yè)的大數(shù)據(jù)挖掘與決策支持系統(tǒng)
- 教育游戲化與學(xué)習(xí)動機(jī)的激發(fā)關(guān)系
- 抖音商戶剪輯師特效使用合理性制度
- 全球鈾礦資源分布與核能產(chǎn)業(yè)國際合作模式研究報告
- 公交優(yōu)先戰(zhàn)略2025年城市交通擁堵治理的公共交通與共享單車融合報告
- 哈爾濱石油學(xué)院《病原生物學(xué)與免疫學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年黑龍江省哈爾濱市六十中學(xué)九年級化學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 上海立信會計金融學(xué)院《大學(xué)語文與寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2023年6月廣東省普通高中學(xué)業(yè)水平考試生物試卷含答案
- 行車安全風(fēng)險點(diǎn)告知牌
- 2019-2020鞍山八年第二學(xué)期語文期末考試帶答案
- 心臟粘液瘤超聲診斷
- 國家開放大學(xué)電大2022年春季期末考試《商務(wù)英語閱讀》試題試卷代號4050
- 2023年音樂考試真題
- NB/T 10751-2021礦用往復(fù)式氣動注漿泵
- 裝卸搬運(yùn)課件
- GB/T 18391.2-2009信息技術(shù)元數(shù)據(jù)注冊系統(tǒng)(MDR)第2部分:分類
- GB/T 16924-2008鋼件的淬火與回火
- 基礎(chǔ)護(hù)理學(xué):肌內(nèi)注射
評論
0/150
提交評論