版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 人工智能是一門正在迅速發(fā)展的新興的,綜合性很強的交叉科學(xué)。它與生物工程、空間技術(shù)一起被并列為二十一世界三大尖端技術(shù)。它的中心任務(wù)是研究如何使計算機去做那些過去只能靠人的智力才能做的工作。目前各發(fā)達國家都把人工智能作為重點項目,列入本國的高科技發(fā)展計劃當中,投入巨大的人力和物力。</p><p> 計
2、算機人機對弈也是其中之一。作為人智能研究的一個重要分支,計算機博弈是檢驗人工水平的一個重要方面。它的研究為人工智能帶來了很多重要的方法和理論,產(chǎn)生了廣泛的社會影響和學(xué)術(shù)影響。</p><p> 五子棋人機對弈是計算機博弈中的一種。研究其計算機算法,可以讓我們看到人工智能的稚形,也有助于我們?nèi)四X的開發(fā)。五子棋是我國發(fā)明的,研究它可以讓更多的外國人了解五子棋,這有助于我國優(yōu)秀文化的推廣。</p>&l
3、t;p> 關(guān)鍵詞:人工智能,計算人機對弈,五子棋,算法</p><p><b> Abstract</b></p><p> Artificial intelligence is a rapidly developing new, integrated a strong Frontier Science. It is with bio-engineerin
4、g, space technology has been listed as 21 in the world along with the three cutting-edge technology. Its central task is to study how to make the computer do that in the past to rely on human intelligence to do. AI is cu
5、rrently regarded as the focus of the developed countries included in this car's high-tech development projects invested tremendous human and material resources. </p><p> Key words: Artificial Intelli
6、gence, Man-machine Cchess Computer, </p><p> Man-machine Chess, Algorithm</p><p><b> 目 錄</b></p><p><b> 摘 要Ⅰ</b></p><p> AbstractⅡ</p&
7、gt;<p> 目錄 .......................................................................................................................... Ⅲ</p><p> 緒論....................................................
8、........................................................... 1</p><p> 需求分析....................................................................................................... 2</p><p> (一)業(yè)
9、務(wù)需求 ................................................................................................ 2</p><p> (二)性能需求 .......................................................................................
10、......... 2</p><p> (三)系統(tǒng)平臺需求 ........................................................................................ 2</p><p> 五子棋相關(guān)基礎(chǔ)........................................................
11、................................. 3</p><p> 3.1 五子棋解釋 ............................................................................................ 3</p><p> 3.2 五子棋的基本規(guī)則 ......................
12、.......................................................... 3</p><p> 3.3 五子棋的常用術(shù)語 ................................................................................ 4</p><p> 開發(fā)工具、環(huán)境及其技術(shù) .......
13、.................................................................... 6</p><p> 4.1 flash 簡介..................................................................................................6</p><
14、p> 程序設(shè)計思路與實現(xiàn) ...................................................................................10</p><p> 5.1 游戲設(shè)計思路.....................................................................................
15、....10</p><p> 5.2 游戲設(shè)計步驟........................................................................................ 11</p><p> 結(jié)論 ................................................................
16、........................................................... 32</p><p> 參考文獻 ....................................................................................................................</p>&l
17、t;p> 致謝 ............................................................................................................................</p><p> 附錄 ..........................................................
18、..................................................................</p><p><b> 第一章:緒論</b></p><p><b> 1.1 前 言</b></p><p> 電腦已經(jīng)深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔
19、助設(shè)計、圖形圖像處理、教育培訓(xùn)以及游戲娛樂等。Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家,各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。通過系統(tǒng)的學(xué)習(xí),人們就可以使用它開發(fā)出功能齊全,滿足特殊需求的應(yīng)用程序。這次畢業(yè)設(shè)計,將學(xué)過的flash中的各種技術(shù)綜合起來,用fl
20、ash8開發(fā)工具編寫一個小游戲,既對自己學(xué)過的技能進行一次檢驗,也能系統(tǒng)地將學(xué)過的知識復(fù)習(xí)鞏固。</p><p> 隨著計算機技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)技術(shù)的普及范圍越來越廣,網(wǎng)絡(luò)能夠提供的服務(wù)多樣、便捷,已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡(luò)休閑游戲發(fā)展迅速,它憑借健康、方便、互動性強、益智等諸多優(yōu)點,成為大部分現(xiàn)代人休閑娛樂的首選。</p><p><b> 第
21、二章 需求分析</b></p><p> 五子連珠,在民間俗稱“五子棋”,是一種流傳很廣的益智棋類游戲,游戲規(guī)則非常簡單,適合各個年齡段的朋友玩,相信大家以前也一定玩過此游戲。</p><p><b> 2.1業(yè)務(wù)需求</b></p><p> 此系統(tǒng)為智力游戲,適合于各類游戲愛好者。由于其經(jīng)典性及其游戲的簡單性,各類人士都可
22、以也都愛玩。人們在與電腦對戰(zhàn)享受娛樂的同時,也會體會到自己的智力也會有所提升。</p><p><b> 功能要求</b></p><p> 人機對弈模式:選擇該模式可以實現(xiàn)人與電腦之間的對弈,電腦會智能的選擇該在哪處下子,并會在每次下棋結(jié)束后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家游戲結(jié)束。</p><p> 人人對弈
23、模式:選擇該模式可以實現(xiàn)人與人之間的對弈,系統(tǒng)會提示哪方先下,然后玩家之間交替的下棋,同樣系統(tǒng)會在下完每次棋后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家游戲結(jié)束。</p><p> 悔棋功能:這個功能也是根據(jù)游戲的實際需求而存在的,在現(xiàn)實生活中難免有失誤下錯了棋,那么就需要悔棋。此功能提供了悔棋功能,使得下棋的靈活性有所提高。玩家若想悔棋,則只需選擇悔棋按鈕便可以重新下過剛才的棋。</p&
24、gt;<p><b> 2.2 性能需求</b></p><p> 該款五子棋游戲功能雖然簡單,但最主要的還是實現(xiàn)了人人對弈模式和人機對弈兩種模式,所以從這個角度來說,該款游戲需要能很好的在兩種模式間良好的轉(zhuǎn)換。雖然系統(tǒng)不大,但要在滿足玩家的基本要求的情況下,電腦有一定的智能,能給于新手一定的幫助。</p><p> 2.3 系統(tǒng)平臺需求</
25、p><p> 編程語言:ActionScript</p><p> 操作系統(tǒng):Windows xp系列</p><p> 開發(fā)工具:Flash 8</p><p> 第三章 五子棋的相關(guān)基礎(chǔ)</p><p><b> 3.1五子棋解釋</b></p><p> 引用
26、《辭海》中所言,五子棋是“棋類游戲,棋具與圍棋相同,兩人對局,輪流下子,先將五子連成一行者為勝?!?。五子棋的名稱:日文亦有“連五子、五子連、串珠、五目、五目碰、五格、五石、五法、五聯(lián)、京棋”等多種稱謂,英文則稱之為FIR (Five In A Row的縮寫)、Gomoku(日語“五目”的羅馬拼音)、Gobang、connect 5、mo-rphion。捷克語piskvorky,韓語omok、韓國人還稱之為情侶棋。</p>
27、<p> 3.2五子棋基本規(guī)則</p><p> 1.五子棋行棋時,黑棋先下第一子,由天元開始,后白棋在黑棋周圍的交叉點的落子。接著黑方再以天元中心的25個交叉點的范圍內(nèi)落盤面的第三子,之后黑白雙方相互順序子。</p><p> 2.最先在棋盤線交點橫向,縱向,斜向形成已方的五個棋子連續(xù)的一方為勝。</p><p> 3.出現(xiàn)禁手對方指出后將判負,
28、其中包括兩個或兩個以上的活三,活四,長連均稱之為禁手。</p><p> 4.禁手只對黑棋有效,白棋無禁手。</p><p> 5.黑方禁手形成時,白方需立即指出,黑方將被判負。若白方未發(fā)現(xiàn)黑方禁手存在而繼續(xù)應(yīng)子,其后指出黑方禁手不能判黑方負。</p><p> 6.黑方連五與禁手同時形成,因黑方已連成五即黑方已獲勝,故禁手規(guī)則失效。</p>&
29、lt;p> 7.在對局中,在盤上落下的子又拿起來,此動作稱為拔子,若拔子將被判為負。</p><p> 8.在對局中棋子掉落在棋盤上將被判負。若推子或蹭子,以盤面第一落點為準。用手將棋子推正不算違犯規(guī)則。</p><p> 9.在對局中,一方自行中止比賽如:中途退場,將被判負。</p><p> 10.在對局中對方宣布認輸,本局獲勝。</p>
30、;<p> 11.超過比賽規(guī)定所用時間限制,將被判為負:正式比賽期間,遲到時間超過比賽容許時間將被判負。</p><p> 12.如下至最終一子仍不分勝負則定為平局。</p><p> 13.中盤期間雙方 同意和局提議,判定為平局。</p><p> 3.3五子棋常用術(shù)語</p><p> 1.著:也稱“步”。對局中把
31、一個棋子按照規(guī)則放到某一交叉點,稱之為一著棋。一著是否完成有兩種規(guī)則:</p><p> (1)在執(zhí)行落子無悔規(guī)則是,以行棋者的手離開棋子為一著已完成。</p><p> (2)在執(zhí)行限時規(guī)則時,以行棋者按下棋鐘作為一著已完成。</p><p> 2.PASS :五子棋中引入的英文名稱,即應(yīng)該行棋的一方主動放棄此次行棋的機會,由對方繼續(xù)行棋。</p>
32、;<p> 3.先手:對方必須應(yīng)答的著法,如對方形成活三必須阻止其形成活四。</p><p> 4.絕對先手:相對先手而言,即形成同色連四或嵌五,對方必須應(yīng)著,就是絕對先手。絕對先手又叫“沖”。</p><p> 5.VCF:(Victory of Continus Four 的縮寫) 意思是利用連續(xù)沖四取勝之意。利用連續(xù)不斷的沖四或嵌五的絕對先手,制止形成連五獲得勝利
33、的一種方法。在對局接近尾聲或排局解題中一種常見的取勝技巧。</p><p> 6.追下取勝:是指白棋利用黑棋禁手取勝的戰(zhàn)術(shù)。白1 沖四,迫使黑2 形成“四、四”禁手( 即沖四,活四禁手), 這種取勝方法叫做追下取勝。</p><p> 7.自由取勝:追下取勝以外的取勝方法,即未利用黑棋禁手戰(zhàn)術(shù)而取勝。</p><p> 8.一子雙殺:是指對局中一方落子后出現(xiàn)兩
34、個叫殺點即兩個獲勝點,而使對方無法防守的情形。一般是有兩個沖四活三點,白棋的雙活三,雙四均可稱為一子雙殺。</p><p> 9.陽線:棋盤上可見的橫線與直線的總稱。</p><p> 10.陰線:也稱“斜線”。是棋盤上不可見的斜行線。</p><p> 11.“四、三”:指同時具備兩個先手,其中一個四,另一個是活三。</p><p>
35、 12.“活三”、“嵌五”、“沖四”:參見五子棋重要棋形講座。</p><p> 13. 禁手:對局中禁止使用的戰(zhàn)術(shù)或被判為負的行棋手段。</p><p> 14. 開局:也稱“布局”。布局階段大體為七至十幾著之內(nèi)。種類繁多,職業(yè)連珠五子棋有二十四種開局。 </p><p> 15. 局面:亦稱“局勢”。為對局中某一段時間
36、內(nèi)雙方子力的配置情況。</p><p> 16. 優(yōu)勢:是指足以取勝的優(yōu)勢局面,其對方即為敗勢。</p><p> 17. 妙著:對局中走出的一步精妙的著法。既合乎邏輯又出人意料,有使局面頓時改觀的效果,對局勢的發(fā)展及對局的質(zhì)量都有重大影響。</p><p> 18. 好著:也稱“佳著”。對局中成功的某一步。</p><p> 19.
37、 正著:對局的某一局面中的正確著法。</p><p> 20. 劣著:對局中,導(dǎo)致嚴重不利后果的一步錯誤著法。</p><p> 21. 敗著:也稱“失著”“漏著”。對局中造成局面惡化的一步嚴重錯誤著法。</p><p> 22. 等著:對局中具有等待性的一步著法,主要意圖是等待有利時機。</p><p> 23. 廢著:也稱“空著”
38、。對局中不起作用的著法。實際上指浪費時間毫無疑義的錯著。</p><p> 24. 搶先:對局中利用反活三或沖四的強制手段奪取主動權(quán)的著法。</p><p> 25. 打譜:按照棋譜演練著法,是提高棋藝水平的重要方法之一。</p><p> 26. 復(fù)局:也叫“復(fù)著”。對局結(jié)束又重演對局的過程。一般用以研究、比較雙方的成敗得失和著法的優(yōu)劣。</p>
39、<p> 第四章 開發(fā)工具、環(huán)境及其技術(shù)</p><p> 4.1 FLASH簡介</p><p> Flash 由macromedia公司推出的交互式矢量圖和 Web 動畫的標準。網(wǎng)頁設(shè)計者使用 Flash 創(chuàng)作出既漂亮又可改變尺寸的導(dǎo)航界面以及其他奇特的效果。Flash的涉及領(lǐng)域較為廣泛,主要涉及:動畫游戲制作,網(wǎng)絡(luò)構(gòu)件,學(xué)習(xí)課件,網(wǎng)站廣告設(shè)計及全flash網(wǎng)
40、站,工控界面等等。主要特點是制作簡單,通用性比較大,涉及的領(lǐng)域多,制作出的東西效果都可以做到非常精致。缺點在于有些效果需要別的軟件輔助制作等等,不是所有效果都能制作出來。</p><p> FLASH有三重意義:1) FLASH英文本意為“閃光”;2)它是全球流行的電腦動畫設(shè)計軟件;3)它代表用上述軟件制作的流行于網(wǎng)絡(luò)的動畫作品。Flash是一種交互式矢量多媒體技術(shù),他的前身是Futureplash,早期網(wǎng)上流
41、行的矢量動畫插件。后來由于Macromedia公司收購了Future Splash以后便將其改名為 Flash2,到現(xiàn)在最新的flashcs3?,F(xiàn)在網(wǎng)上已經(jīng)有成千上萬個Flash站點,著名的如Macromedia專門ShockRave站點,全部采用了Shockwave Flash 和Director??梢哉fFlash已經(jīng)漸漸成為交互式知量的標準,未來網(wǎng)頁的一大主流。 </p><p> 動畫是將靜止的畫面變?yōu)閯?/p>
42、態(tài)的藝術(shù).實現(xiàn)由靜止到動態(tài),主要是靠人眼的視覺殘留效應(yīng).利用人的這種視覺生理特性可制作出具有高度想象力和表現(xiàn)力的動畫影片。動畫以人類視覺的原理為基礎(chǔ)。 如果快速查看一系列相關(guān)的靜態(tài)圖像,那么我們會感覺到這是一個連續(xù)的運動。 每一個單獨圖像稱之為幀。幀是動畫電影中的單個圖像。</p><p> Flash是MacroMedia公司專為網(wǎng)絡(luò)應(yīng)用設(shè)計的一個交互性矢量動畫設(shè)計軟件。網(wǎng)站設(shè)計者可以使用Flash為網(wǎng)站設(shè)計
43、各種動態(tài)Logo動畫、導(dǎo)航條以及全屏動畫,還可以加入動感音樂,完全具備多媒體的各項功能。Flash以其體積短小,流體播放的特點迅速打開市場,將WWW上的站點頁面設(shè)計帶上了一個全新的高度。實現(xiàn)Web數(shù)據(jù)庫的應(yīng)用一般有兩種方法:一種是Web服務(wù)器端提供中間件,連接Web服務(wù)器與數(shù)據(jù)庫服務(wù)器;另一種是把應(yīng)用程序下載到客戶端直接訪問數(shù)據(jù)庫。最常用的中間件技術(shù)有通用網(wǎng)關(guān)接口(CGI)和應(yīng)用程序編程接口(API)兩種。CGI程序存在效率低、速度慢等
44、缺點;而API很大程度上克服了CGI的缺點,但其兼容性差,開發(fā)難度大也讓許多開發(fā)人員望而卻步??蛻舳嗽L問數(shù)據(jù)庫主要包括JavaScript和數(shù)據(jù)庫連接器(IDC)等。用JavaScript和IDC開發(fā)Web數(shù)據(jù)庫雖然簡單,但也存在功能有限、不能完全控制其過程等缺點,所以它們也無法勝任較復(fù)雜的Web數(shù)據(jù)庫的開發(fā)。微軟推出的ASP方案很好地解決了這些難題。ASP(Active Server Page)是Microsoft公司推出的一種基于服
45、</p><p> 動畫與動畫設(shè)計(即原畫)是不同的概念,原畫設(shè)計是動畫影片的基礎(chǔ)工作.原畫設(shè)計的每一鏡頭的角色、動作、表情,相當於影片中的演員.所不同的是設(shè)計者不是將演員的形體動作直接拍攝到膠片上,而是通過設(shè)計者的畫筆來塑造各類角色的形象并賦予他們生命、性格和感情。</p><p> 動畫片中的動畫一般也稱為"中間畫".這是指兩張原畫的中間過程而言的.動畫片動作的
46、流暢、生動,關(guān)鍵要靠"中間畫"的完善.一般先由原畫設(shè)計者繪制出原畫,然后動畫設(shè)計者根據(jù)原畫規(guī)定的動作要求以及幀數(shù)繪制中間畫.原畫設(shè)計者與動畫設(shè)計者必須有良好的配合才能順利完成動畫片的制作。</p><p> 動畫繪制需要的工具一般有:拷貝箱工作臺、定位器、鉛筆、橡皮、顏料、曲線尺等.方法是:按原畫順序?qū)⑶昂髢蓮埉嬅嫣自诙ㄎ黄魃?,然后再覆蓋一張同樣規(guī)格的動畫紙,通過臺下拷貝箱的燈光,在兩張原畫
47、動作之間先畫出第一張中間畫(稱為第一動畫),然后再將第一動畫與第一張原畫疊起來套在定位器上,覆蓋另一張空白動畫紙畫出第二動畫.依此方法,繪制出兩張原畫之間的全部動作。</p><p> 對動畫時間的基本考慮是放映速度:電影和電視的放映速度是24幀/秒,而動畫片一般有12幀就可以了,然后錄制或拍攝時進行雙格處理。如果繪制動作較快的動畫最好進行單格處理,即每秒要繪制24個畫面。對於快速奔跑的動作,一般采用8幀單格畫
48、面。對於物體發(fā)生震動用單格處理兩端的動作就可以了。</p><p> 物體的靜止到移動到靜止都有類似的規(guī)律:靜止開始時速度慢、運動中的速度快、運動停止時的速度慢.表現(xiàn)在幀數(shù)上則是:從靜止到運動幀數(shù)逐漸減少,從運動到靜止幀數(shù)逐漸增加,中間運動過程的速度最快,幀數(shù)也最少。</p><p> 動畫中經(jīng)常會有循環(huán)動作,但不同的情況需要的幀數(shù)也是不同的。如:快速飄揚的旗需要6幀畫面循環(huán);又如火焰
49、的循環(huán),大火的動作循環(huán)從底部燒到頂部可能需要幾秒,而小火的循環(huán)只需要幾幀;下雨的循環(huán)動作最好設(shè)置兩層,前層雨水穿過屏幕,一般需6幀畫面,后層雨水穿過屏幕的時間慢於前層,循環(huán)的幀數(shù)也相應(yīng)多於前層;下雪的動畫則至少需要有3種大小不同的雪花,循序的時間約需要2秒;一個急速跑步動作需4幀畫面,快跑動作需8幀畫面,慢跑動作則需12幀,超過16 幀,畫面就失去沖刺感覺;大象需要1~1.5秒完成一個完整的步子;小動物如貓的一個動作只需0.5 秒或更少
50、;鷹的翅膀一個循環(huán)需要8幀;小麻雀的翅膀循環(huán)動作有2幀畫面就可以了。</p><p> 在Flash的時間幀面板上,在一個時間點(關(guān)鍵幀)繪制一個形狀,然后在另一個時間點(關(guān)鍵幀)更改該形狀或繪制另一個形狀,F(xiàn)lash 根據(jù)二者之間的幀的值或形狀來創(chuàng)建的動畫被稱為“形狀補間動畫”。</p><p> 形狀補間動畫可以實現(xiàn)兩個圖形之間顏色、形狀、大小、位置的相互變化,其變形的靈活性介于逐
51、幀動畫和動作補間動畫二者之間,使用的元素多為用鼠標或壓感筆繪制出的形狀,如果使用圖形元件、按鈕、文字,則必先“打散”再變形。</p><p> 形狀補間動畫建好后,時間幀面板的背景色變?yōu)榈G色,在起始幀和結(jié)束幀之間有一個長長的箭頭。</p><p> 在時間軸面板上動畫開始播放的地方創(chuàng)建或選擇一個關(guān)鍵幀并設(shè)置要開始變形的形狀,一般一幀中以一個對象為好,在動畫結(jié)束處創(chuàng)建或選擇一個關(guān)鍵幀并
52、設(shè)置要變成的形狀,再單擊開始幀,在【屬性】面板上單擊【補間】旁邊的小三角,在彈出的菜單中選擇【形狀】,此時,時間軸上的變化如圖3-3-1所示,一個形狀補間動畫就創(chuàng)建完畢。Flash的【屬性】面板隨鼠標選定的對象不同而發(fā)生相應(yīng)的變化。當我們建立了一個形狀補間動畫后,點擊時間幀,【屬性】。</p><p> Flash動畫說到底就是“遮罩+補間動畫+逐幀動畫”與元件(主要是影片剪輯)的混合物,通過這些元素的不同組合
53、,從而可以創(chuàng)建千變?nèi)f化的效果。</p><p> 三大基本功能之外的延伸Flash動畫的三大基本功能是一切Flash動畫應(yīng)用的基礎(chǔ)。但現(xiàn)在Flash已經(jīng)是一個非常強大的平臺,他是一個富媒體環(huán)境。在Flash 4時他加入了MP3聲音的支持,F(xiàn)lash 3及以前的版本對音頻支持是很匱乏的,從那個時候起你可以設(shè)計多媒體的Flash動畫了。在Flash 6時他加入了視頻的支持,F(xiàn)lash 5及以前的版本不支持視頻(不包
54、括鏈接的Quicktime),這時,你可以嵌入視頻,也可以播放外部的Flv格式的視頻。甚至,你還可以捕做到來自麥克風(fēng)和攝像頭的實時音頻和視頻。雖然Flash 4以前的版本中也有簡潔的腳本代碼,但應(yīng)該不算有嚴格意義上的Actionscript,充其量只能算是Action,因為他僅有簡單的幾條語句,連加減乘除運算符都沒有。增強的圖形處理功能目前Flash對位圖的處理功能還比較弱,因為它最初是從矢量處理起始的,加之矢量圖形是Flash GUI
55、設(shè)計之基石,所以估計還會沿著矢量處理的道路繼續(xù)前進。</p><p> Flash的功能可能越來越復(fù)雜,如何系統(tǒng)地掌握這項技術(shù)就顯得非常重要。系統(tǒng)地掌握一門技術(shù)有兩個好處:一個是對目前的功能有清晰的認識;第二,就是能夠從容應(yīng)對更復(fù)雜的知識。</p><p> 了解這些對于一個初入門的動畫設(shè)計者是非常有意義的,正是將這些功能邏輯的整理出來,有利于用戶建立正確的、邏輯的知識體系,而不是再在
56、黑夜里徘徊了。</p><p> 第五章 程序設(shè)計思路與實現(xiàn)</p><p> 5.1 程序設(shè)計思路</p><p> 游戲的主界面如圖1所示:</p><p><b> 圖1</b></p><p> 棋子的位置根據(jù)棋盤上的橫縱標識來決定(橫向為1-15,縱向為A-O)。</p
57、><p> 剛開始不知從何下手,后來通過相關(guān)資料發(fā)現(xiàn)游戲關(guān)鍵在于玩家中有一方是電腦,如何合理的控制電腦走棋是最關(guān)鍵的部分。如果要實現(xiàn)電腦的自動計算棋局和決定落子位置,就需要用到一些Ai(人工智能)方面的知識。</p><p> 棋類游戲一般都會在一個二維的棋盤上進行,所以自然的就會使用二維數(shù)組來記錄棋子的位置和決定落子的位置,數(shù)組在棋類游戲中也是應(yīng)用非常的廣泛。</p>&l
58、t;p> 5.2游戲制作步驟:</p><p><b> 游戲素材準備</b></p><p> 1.棋子的準備:棋類游戲當然少不了棋子,本游戲中需要兩類棋子,一種為黑色棋子,一種為白色棋子,默認情況下電腦使用黑色棋子,我們可以從外部導(dǎo)入兩副棋子圖片,也可以在Flash中進行手工繪制。</p><p> 新建一個Graphic組件
59、,并命名為black graphic,使用橢圓工具繪制一個圓形,并填充上黑色,這樣一個簡單的黑色棋子就做好了,如圖2</p><p><b> 圖2</b></p><p> 寬14.3,長14.3 X:-7.2 Y-7.2</p><p> 因為我們需要在游戲中使用Action對棋子進行控制,所以需要將上面做好的Graphic組件轉(zhuǎn)換為
60、Movie clip類型的組件。所以新建一個movie clip組件,命名為black,將組件black graphic拖到組件black的編輯區(qū)即可。</p><p> 按照同樣的方法制作一個white graphic組件,并繪制一個白色的棋子,然后在建立相應(yīng)的white movie clip組件,繪制好的白色棋子如圖3所示圖3</p><p> 2. 控制按鈕的制作:游戲中需要使用
61、鼠標將棋子落到棋盤上,所以需要使用按鈕結(jié)合棋子的方法,因為游戲中我們看到的實際是棋子,但是控制的是按鈕,所以這里我們只需要制作一個簡單的隱形按鈕即可,按鈕大小和棋子大小相似,如圖4所示:(最好將棋子打碎用Ctrl+B打碎兩次)</p><p><b> 圖4</b></p><p> 當游戲結(jié)束后還需要有一個Replay按鈕允許玩家重玩游戲,所以可以建立一個簡單的
62、按鈕,用來控制游戲的再次運行,Replay按鈕如圖5所示:</p><p><b> 圖5</b></p><p> 3. 控制棋類游戲中少不了大量的Action程序控制,為了便于對游戲進行控制,一般將Action放在專門的Movie clip中,然后就可以在游戲的任何地方調(diào)用了。A:新建一個Movie clip組件,命名為blk,進入組件編輯狀態(tài)后,在第一關(guān)鍵
63、楨添加如下AS:</p><p> stop();function makelist(maker) //自定義函數(shù)makelist,參數(shù)為maker,其作用是生成一個列表{if (maker =="white") //如果傳遞進函數(shù)的參數(shù)是white{color = 2;color_bad = 1;//設(shè)置兩變量值}else //如果傳遞進函數(shù)的參數(shù)是black
64、{color = 1;color_bad = 2;//設(shè)置兩變量值}for (i=0; i<15; i++) //外循環(huán),循環(huán)變量為I,循環(huán)次數(shù)為15次{for (j=0; j<15; j++) //外循環(huán),循環(huán)變量為j,循環(huán)次數(shù)為15次,兩次循環(huán)共15*15此,正好等于棋盤的大小,用來設(shè)//置棋盤{if (_root.table[i][j] <> 0) //table數(shù)組用來檢查棋盤是
65、否為空,為空,相應(yīng)的值為1,否則為0{for (k=0; k<4; k++) {if (maker =="white") {_root.computer[i*15+j][k] = 0;} else{_roo</p><p> {x = x + _root.dir[k+4][0];y = y + _root.dir[k+4][1];score = score *
66、 2;}if (score > 30) {score = score * 2;}if ((_root.table[x+_root.dir[k+4][0]][y+_root.dir[k+4][1]] == color_bad) and (x+_root.dir[k+4][0] < 15) and (y+_root.dir[k+4][1] >= 0) and (y+_root.dir[k+4][1] < 1
67、5) and (x+_root.dir[k+4][0] >= 0)) {score = score / 2;}if (maker =="white") {_root.computer[i*15+j][k] = score;} else {_root.player[i*15+j][k] = score;}}//初始化棋盤,根據(jù)上一步落子的不同,來計算一下一步的落子}}}}</p>
68、;<p> B:再新建一個Movie clip組件,命名為blk2,進入組件編輯狀態(tài)后,在第一關(guān)鍵楨添加as:stop();在第六楨插入一個關(guān)鍵楨,并添加如下AS:</p><p> if (_root.playnow == "computer") {// 如果先落子的為電腦,則初始化棋盤_root.func.makelist("white")
69、;_root.func.makelist("black");//分別調(diào)用前面定義的自定義函數(shù),且傳遞不同的參數(shù)max_computer = 0;max_player = 0;k = 0;//定義三個變量for (j=0; j<15; j++) {for (i=0; i<15; i++) {for (k=0; k<4; k++) {if (_root.comput
70、er[j*15+i][k] == max_computer) {rndnum = random ( 100 ) + 1;if (rndnum > 50) {max_computer = _root.computer[j*15+i][k] ;xc = i;yc = j;}}if (_root.computer[j*15+i][k] > max_computer) {max_computer
71、</p><p> _root.gameoverman.gotoAndPlay(2);</p><p><b> }}</b></p><p> C:新建一個Movie clip組件,并命名為bb,此組件用來計算電腦如何走棋,進入組件編輯狀態(tài)后,在圖層layer1繪制一個有填充色的矩形,然后在第5楨插入一個關(guān)鍵楨,在同樣位置繪制一個大小
72、相同填充色不同的矩形。新建一個圖層,在矩形里輸入提示文字:電腦走棋,然后再新建一個圖層Action,在第一楨添加AS: stop();,在第8楨插入一個關(guān)鍵楨,在此楨添加如下AS:</p><p> if (_root.playnow == "computer") {//初始化棋盤_root.func.makelist("white");_root.func.ma
73、kelist("black");//調(diào)用自定義函數(shù)max_computer = 0;max_player = 0;k = 0;//定義三變量for (j=0; j<15; j++) {for (i=0; i<15; i++) {for (k=0; k<4; k++) {if (_root.computer[j*15+i][k] == max_computer) {
74、rndnum = random ( 100 ) + 1;if (rndnum > 50) {max_computer = _root.computer[j*15+i][k] ;xc = i;yc = j;}}if (_root.computer[j*15+i][k] > max_computer) {max_computer = _root.computer[j*15+i][k] ;xc = i;yc&l
75、t;/p><p> if (max_computer > max_player) {x = xc;y = yc;} else {x = xp;y = yp;}// 繪制棋子num = y * 15 + x;removeMovieClip(_root.b add num);duplicateMovieClip(_root.white, "white"
76、add num, num + 300);setProperty(_root.white add num, _x, 34.7 + x * 20);setProperty(_root.white add num, _y, 34.7 + y * 20);_root.table[y][x] = 2;// 顯示棋子_root.display = "Xpos : " + (x + 1);temp = ch
77、r ( y + 65);_root.display1 = "Ypos : " + temp;_root.playnow = "player";// 判斷是否獲勝</p><p> xx = x;yy = y;for (k=0; k<4; k++) {if (_root.a_result <> 6) {_root.a_result =
78、0;x = xx;y = yy;while ((_root.table[y][x] == 2) and (y+_root.dir[k][1] < 16) and (x+_root.dir[k][0] >= -1) and (x+_root.dir[k][0] < 16) and (y+_root.dir[k][1] >= -1)) {x = x + _root.dir[k][0];y = y + _
79、root.dir[k][1];// "_root.table["+y+"]["+x+"]="+_root.table[y][x]_root.a_result = _root.a_result+1;}x = xx;y = yy;while ((_root.table[y][x] == 2) and (y+_root.dir[k+4][1] < 16)
80、 and (x+_root.dir[k+4][</p><p> _root.gameoverman.gotoAndPlay(2);</p><p><b> } }</b></p><p> D:再新建一個movie clip組件,命名為buttonclip,此組件用來控制雙方的落子,進入組件編輯狀態(tài)后,將前面做好的隱形按鈕拖放到編輯
81、區(qū)中,然后給第一楨添加AS:</p><p><b> stop();.</b></p><p> 給這個隱性按鈕加AS</p><p> on (release) {</p><p> if (_root.playnow == "player") {</p><p>
82、 // Get xpos ypos</p><p> _root.xpos = (int(this._x +0.5) - 15)/20 - 1;</p><p> _root.ypos = (int(this._y +0.5) - 15)/20 - 1;</p><p> // Display</p><p> temp = (in
83、t(this._x +0.5) - 15)/20;</p><p> _root.display = "Xpos : " + temp;</p><p> temp = (int(this._y +0.5) - 15)/20;</p><p> temp = chr ( temp + 64);</p><p> _
84、root.display1 = "Ypos : " + temp;</p><p> _root.num = _root.ypos * 15 + _root.xpos;</p><p> // Draw the balls</p><p> removeMovieClip(_root.b add _root.num);</p>
85、<p> duplicateMovieClip(_root.black, "black" add _root.num, _root.num + 300);</p><p> setProperty(_root.black add _root.num, _x, 34.7 + _root.xpos * 20);</p><p> setProperty(_
86、root.black add _root.num, _y, 34.7 + _root.ypos * 20);</p><p> _root.table[ypos][xpos] = 1;</p><p> // Changer to computer</p><p> _root.playnow = "computer";</p>
87、<p><b> // Win?</b></p><p> xx = _root.xpos;</p><p> yy = _root.ypos;</p><p> for (k=0; k<4; k++) {</p><p> if (_root.a_result <> 6) {&
88、lt;/p><p> _root.a_result = 0;</p><p><b> x = xx;</b></p><p><b> y = yy;</b></p><p> while ((_root.table[y][x] == 1) and (y+_root.dir[k][1] <
89、; 16) and (x+_root.dir[k][0] >= -1) and (x+_root.dir[k][0] < 16) and (y+_root.dir[k][1] >= -1)) {</p><p> x = x + _root.dir[k][0];</p><p> // "_root.table["+y+"]["
90、+x+"]="+_root.table[y][x] (for trace)</p><p> y = y + _root.dir[k][1];</p><p> _root.a_result = _root.a_result+1;</p><p><b> }</b></p><p><b
91、> x = xx;</b></p><p><b> y = yy;</b></p><p> while ((_root.table[y][x] == 1) and (y+_root.dir[k+4][1] < 16) and (x+_root.dir[k+4][0] >= -1) and (x+_root.dir[k+4][0]
92、 < 16) and (y+_root.dir[k+4][1] >= -1)) {</p><p> x = x + _root.dir[k+4][0];</p><p> y = y + _root.dir[k+4][1];</p><p> _root.a_result = _root.a_result+1;</p><p&
93、gt;<b> }</b></p><p> if (_root.a_result == 6) {</p><p> _root.playnow = "nobody";</p><p><b> }</b></p><p><b> }</b>&l
94、t;/p><p><b> }</b></p><p> // Game over</p><p> if (_root.playnow =="nobody") {</p><p> _root.gameoverman.gotoAndPlay(3);</p><p><
95、;b> }</b></p><p><b> }</b></p><p> // It's computer's turn</p><p> if (_root.playnow =="computer") {</p><p> _root.computerr
96、un.gotoAndPlay(5);</p><p><b> }</b></p><p> }E:最后再制作一個movie clip,命名為gameover,此組件用來判斷游戲是否結(jié)束,也就是判斷是缶有一方已經(jīng)連好了五顆棋子。進入組件編輯狀態(tài)后,連續(xù)建立四個圖層,分別為layer1,layer2,layer3和action,在layer1,layer2,lay
97、er3的第一楨插入空白,然后在第2楨繪制電腦獲勝的提示信息,并將Replay按鈕拖到編輯區(qū)中,給按鈕添加As:</p><p> on (release) </p><p> 在layer1,layer2,layer3的第三楨按照同樣的方法設(shè)置您勝利的提示信息,</p><p> 然后回到圖層action,接下來就要添加具體的控制Action了,在此圖層的前三
98、個關(guān)鍵楨分別添加as: stop();,在第四關(guān)鍵楨添加如下AS:for (i=0; i<=225; i++) {removeMovieClip(_root.black add i);removeMovieClip(_root.white add i);removeMovieClip(_root.b add i);}//清除棋盤上的棋子_root.gotoAndPlay("run")
99、;//跳轉(zhuǎn)到游戲的開始</p><p> 布置主場景:游戲的主要工作完成后,接下來需要布置主場景了。首先使用繪圖工具繪制出游戲中的棋盤,棋盤大小為15*15的矩陣,然后給棋盤標上橫向</p><p> 分別將組件white,black,buttonclip,blk,bb和gameover拖到舞臺的合適位置,如圖所示:</p><p> 組件white的
100、實例名為:black組件black的實例名為:white組件buttonclip的實例名為:b組件blk的實例名為:func組件bb的實例名為:computerrun組件gameover的實例名為:gameoverman然后在棋盤上繪制兩個Dynamic text動態(tài)文本框,用來顯示上一步落子的位置,分別設(shè)置變量名為display和display1。最后,給第一關(guān)鍵禎添加as:</p><p>
101、 stop();num = 0;table = new Array();computer = new Array();player = new Array();a_result = 0;// Table arrayfor (i=0; i<15; i++) {table[i] = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}// Computer and player ta
102、ble listfor (j=0; j<15; j++) {for (i=0; i<15; i++) {computer[j*15+i] = new Array(0,0,0,0);player[j*15+i] = new Array(0,0,0,0);}}// Make buttonscount = 0;for (j=0; j<15; j++) {for (i=0; i<15; i++) {
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java五子棋畢業(yè)設(shè)計論文
- 五子棋畢業(yè)論文-html開發(fā)五子棋的原型設(shè)計
- 五子棋游戲畢業(yè)設(shè)計
- 五子棋畢業(yè)論文
- 畢業(yè)設(shè)計--五子棋人機對弈
- 畢業(yè)設(shè)計---網(wǎng)絡(luò)五子棋游戲
- 五子棋游戲設(shè)計畢業(yè)論文
- 網(wǎng)絡(luò)五子棋五子棋設(shè)計與實現(xiàn).doc
- java五子棋畢業(yè)設(shè)計--java五子棋對弈程序的設(shè)計與實現(xiàn)
- 網(wǎng)絡(luò)五子棋游戲畢業(yè)設(shè)計
- java五子棋畢業(yè)設(shè)計(整套)
- 五子棋對弈系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 畢業(yè)論文——五子棋游戲設(shè)計
- 畢業(yè)設(shè)計--五子棋程序設(shè)計
- qt網(wǎng)絡(luò)五子棋五子棋設(shè)計與實現(xiàn)
- flash課程設(shè)計---五子棋游戲制作
- 人機對弈五子棋游戲畢業(yè)設(shè)計
- 畢業(yè)論文---網(wǎng)絡(luò)五子棋游戲設(shè)計
- 畢業(yè)設(shè)計(論文)linux環(huán)境下五子棋游戲設(shè)計
- java五子棋游戲畢業(yè)論文
評論
0/150
提交評論