基于Java的五子棋游戲的設計說明_第1頁
基于Java的五子棋游戲的設計說明_第2頁
基于Java的五子棋游戲的設計說明_第3頁
基于Java的五子棋游戲的設計說明_第4頁
基于Java的五子棋游戲的設計說明_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 PAGE21 / NUMPAGES25 共享資料,信息互通。需要更多相關資料和設計源代碼。加 :493703123基于Java的五子棋游戲的設計基于Java的五子棋游戲的設計摘 要五子棋作為一個棋類競技運動,在民間十分流行,為了熟悉五子棋規(guī)則與技巧,以與研究簡單的人工智能,決定用Java開發(fā)五子棋游戲。主要完成了人機對戰(zhàn)和玩家之間聯(lián)網(wǎng)對戰(zhàn)2個功能。網(wǎng)絡連接部分為Socket編程應用,客戶端和服務器端的交互用Class Message定義,有很好的可擴展性,客戶端負責界面維護和收集用戶輸入的信息,與錯誤處理。服務器維護在線用戶的基本信息和任意兩個對戰(zhàn)用戶的棋盤信息,動態(tài)維護用戶列表。在人機對弈

2、過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準性的幾個要素,以與提出若干提高精準性的辦法,以與對它們搜索的節(jié)點數(shù)進行比較,在這些算法的基礎上分析一些提高電腦AI方案,如遞歸算法、電腦學習等。算法的研究有助于理解程序結構,增強邏輯思維能力,在其他人工智能方面也有很大的參考作用。關鍵詞:深度搜索;估值;電腦AI;五子棋;算法Gobang Java-based games designAbstractAs a sport, gobang is very popular in civil, in order to become familiar with gobang rules

3、 and techniques, and the study of simple artificial intelligence, I decide to use the Java to develope gobang games and complete the two functions including man-machine war and man-man war. Network Connection is Socket Programming for some applications, client and server interaction is definited by

4、Class Message,which is a very good scalability, Client interface is responsible for the collection and maintenance of user input information, and error handling. Server users maintain online basic information and arbitrary two-time users of the chessboard of information, dynamic maintenance user lis

5、t. During the man-machine players,it improves intelligence of the computer players through depth search and valuation module. Analyzes Module valuation of the precise elements, as well as a number of increased precision, and compares their search for nodes, which raises some computer AI programs on

6、the basis of analysis, such as recursive algorithm, computer learning. Algorithm of procedures contribute to the understanding of the structure, logical thinking ability, In other areas of artificial intelligence has great references. . Key words:Search depth; Valuation; Computer AI;Gobang;Algorithm

7、 目 錄論文總頁數(shù):23頁TOC o 1-3 h z uHYPERLINK l _Toc1694399811引言 PAGEREF _Toc169439981 h 1HYPERLINK l _Toc1694399821.1課題背景 PAGEREF _Toc169439982 h 1HYPERLINK l _Toc1694399831.2本課題研究的意義 PAGEREF _Toc169439983 h 1HYPERLINK l _Toc1694399841.3本課題的研究方法 PAGEREF _Toc169439984 h 2HYPERLINK l _Toc1694399852課題相關基礎 PAG

8、EREF _Toc169439985 h 2HYPERLINK l _Toc1694399862.1五子棋 PAGEREF _Toc169439986 h 2HYPERLINK l _Toc1694399872.1.1棋盤和棋子 PAGEREF _Toc169439987 h 2HYPERLINK l _Toc1694399882.1.2規(guī)則與解釋 PAGEREF _Toc169439988 h 3HYPERLINK l _Toc1694399892.1.3五子棋常用術語 PAGEREF _Toc169439989 h 4HYPERLINK l _Toc1694399902.1.4五子棋攻防

9、PAGEREF _Toc169439990 h 7HYPERLINK l _Toc1694399913Java PAGEREF _Toc169439991 h 8HYPERLINK l _Toc1694399923.1Java簡介 PAGEREF _Toc169439992 h 8HYPERLINK l _Toc1694399933.2Java開發(fā)環(huán)境 PAGEREF _Toc169439993 h 9HYPERLINK l _Toc1694399944課題詳細研究方法 PAGEREF _Toc169439994 h 10HYPERLINK l _Toc1694399954.1程序結構說明 P

10、AGEREF _Toc169439995 h 10HYPERLINK l _Toc1694399964.2棋盤與棋子的類 PAGEREF _Toc169439996 h 11HYPERLINK l _Toc1694399974.2.1棋盤 PAGEREF _Toc169439997 h 11HYPERLINK l _Toc1694399984.2.2棋子 PAGEREF _Toc169439998 h 13HYPERLINK l _Toc1694399994.3勝負判斷條件 PAGEREF _Toc169439999 h 13HYPERLINK l _Toc1694400004.4網(wǎng)絡對戰(zhàn) P

11、AGEREF _Toc169440000 h 15HYPERLINK l _Toc1694400014.5電腦AI PAGEREF _Toc169440001 h 17HYPERLINK l _Toc169440002結論 PAGEREF _Toc169440002 h 21HYPERLINK l _Toc169440003參考文獻 PAGEREF _Toc169440003 h 21HYPERLINK l _Toc169440004致 PAGEREF _Toc169440004 h 22HYPERLINK l _Toc169440005聲明 PAGEREF _Toc169440005 h 2

12、3引言課題背景五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為連珠,英譯為Renju,英文稱之為Gobang或FIR(Five in a Row 的縮寫),亦有連五子、五子連、串珠、五目、五目碰、五格等多種稱謂。五子棋起源于古代中國,發(fā)展于日本,風靡于歐洲。對于它與圍棋的關系有兩種說法,一說早于圍棋,早在 “ 堯造圍棋 ” 之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個分支。在中國的文化里,倍受人們的青睞。本世紀初五子棋傳入歐洲并迅速風靡全歐。通過一系列的變化,使五子棋這一簡單的游戲復雜化、規(guī)化,而最終成為今天的職業(yè)連珠五子棋,同時也成為一種國際比賽棋。Java語言是

13、當今最為流行的程序設計語言之一作為一門非常優(yōu)秀和極為健壯的編程語言,它同時具有的面向對象,與平臺無關,分布式應用,安全,穩(wěn)定和多線程等優(yōu)良的特征,使用Java語言,不僅可以開發(fā)出功能強大的大型應用程序,而且Java語言本身突出的跨平臺的特性也使得它特別適合于Internet上的應用開發(fā),可以這樣說,Java的出現(xiàn)使得所開發(fā)的應用程序“一次編寫,處處可用”的實現(xiàn)成為了可能。本課題研究的意義近來隨著計算機的快速發(fā)展,各種各樣的電腦游戲層出不窮,使得我們能有更多的娛樂項目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢。其中戰(zhàn)勝過國際象棋世界冠軍-卡斯帕羅

14、夫的“深藍”便是最具說服力的代表;其它像圍棋的“手淡”、象棋的“將族”等也以其優(yōu)秀的人工智能深受棋迷喜愛。 越來越多的具有智能的機器進入了人類的生活,人工智能的重要性如今顯而易見。自己對人工智能比較感興趣,而五子棋游戲程序的開發(fā)實現(xiàn)這個課題,正好提供給我這樣一個研究的機會,通過對人工智能中博弈方面的研究(人機對弈),讓我在簡單的人機對弈全局設計,以與具體到相關算法上有了深入的了解。人工智能屬于計算機科學的領域,它以計算機技術為基礎,近幾十年來,它的理論和技術已經(jīng)日益成熟,應用領域也正在不斷擴大,顯示出強大的生命力。人工智能大致可以分成幾個學科,它們每一個都是獨特的,但是它們常常又互相結合起來完

15、成設計任務,這時,這些學科之間的差別就變的很模糊。人工智能在專家系統(tǒng),自然語言理解,自動定理證明,自動程序設計,人工智能在機器人學、模式識別、物景分析、數(shù)據(jù)庫的智能檢索、機器下棋(實質(zhì)上是博弈論問題)和家用電器智能化等領域都有廣泛的應用。而這個課題就是和人工智能中的博弈論領域緊密相關的。這個題目核心是人工智能和Socekt編程,。并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技術,正在各行各業(yè)廣泛滲透。智能已經(jīng)成為當今各種新產(chǎn)品、新裝備的發(fā)展方向。所以,趁著這個機會,對人工智能中比較容易實現(xiàn)的人機博弈進行了解研究學習,也是很實用且很有必要的。本課題

16、的研究方法 在進行游戲設計之前,首先決定的第一個問題就是,使用什么開發(fā)環(huán)境來編寫環(huán)境? 自己雖然比較熟悉Java語言,但是實際開發(fā)項目經(jīng)驗很少,所以決定用Jcreator,其擁有高亮語法編輯、使用向導以與完全定制的用戶界面,最主要的是能夠自動查找文件于 Main 方法或 Html 文件以支持Java 小應用程序,然后啟動相應的工具。 其次確定整個程序的結構框架。由于Applet運行速度較慢,如果在加上算法搜索時間,顯然不符合程序的設計要求,決定用Java應用程序開發(fā).整個程序的功能實現(xiàn)流程是這樣的:網(wǎng)絡對戰(zhàn)涉與算法較少,所以先實現(xiàn)網(wǎng)絡部分,實現(xiàn)基本的棋盤和棋子的類,添加判斷勝負條件,這部是基礎

17、,也是很重要的,電腦AI也在這些基礎上添加上來的。這個題目的2個功能包括2個重要算法,電腦AI和勝負條件,勝負條件運算量不大,有固定的模式。難點是人工智能,可以這樣說,人工智能的好壞決定了這個題目的完成深度。所以,大部份時間花在AI算法的研究和改進上,對于算法我掌握的不多,研究了一些國的五子棋算法,參考了一些游戲設計算法,詳細比較各種算法的優(yōu)缺點,而且參考了現(xiàn)代五子棋比賽的各種規(guī)則和技巧,盡量聯(lián)系實際,努力提高電腦AI。課題相關基礎五子棋棋盤和棋子現(xiàn)代五子棋棋盤,經(jīng)過國際棋聯(lián)的多次修改,最終定為15 X 15路,即棋盤由橫豎各15條平行線交叉組成,共有225個交叉點;棋盤上共有五個星位,中間的

18、星位稱為天元,周圍四點為小星,與圍棋盤略有不同。見圖1。 圖1 棋盤五子棋的棋子和圍棋一樣,分黑白2種顏色,通常為散圓形,有一面凸起或二面凸起等形狀,一副棋子總數(shù)為225枚,其中黑子113枚,白子112枚。關于計時,正規(guī)比賽按不同級別設置了不同的時間限制,一般的玩家都沒有這個限制。規(guī)則與解釋1:黑棋先行,白棋隨后。從天元開始相互順序落子。2:最先在棋盤的橫向、豎向、斜向形成連續(xù)的一樣色五個棋子的一方為勝利。3:黑棋禁手判負、白棋無禁手。黑棋禁手包括“三、三”;“四、四”;“長連”。黑方只能用“四、三”去取勝。4:如分不出勝負,則定位平局。5:對局中拔子、中途退場均判為負6:五連與禁手同時形成,

19、先五為勝。7:黑方禁手形成時,白方應立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指正,反而繼續(xù)落子,則不能判黑方負。 五子棋是由兩個人在一盤棋上進行對抗的競技運動。在對局開始時,先由執(zhí)黑棋的一方將一枚棋子的落在“天元”上,然后由執(zhí)白棋的一方在黑棋周圍的交叉點上落子。如此輪流落子直到某一方首先在棋盤的直線 橫線或斜線上形成連續(xù)的五子或五子以上,則該方就算獲勝。但是五子棋的特點是先行的一方優(yōu)勢很大。因此,在職業(yè)比賽種對黑方做了種種限制,以利公平競爭。黑白雙方的勝負結果必須按照職業(yè)五子棋的規(guī)則要求來決定。五子棋常用術語二:二是五子棋的一切進攻的基礎;又分為活二和死二。活二:即再下一子可形成活三的二,見圖2。

20、死二:即再下一子可形成死三的二,見圖3。圖2 活二圖3 死二三:三是五子棋最常見的攻擊手段。三分為活三、死三、眠三?;钊簽樵傧乱蛔蛹纯勺兂苫钏牡娜ɑ钏慕榻B見后)?;蛉譃檫B三、跳三。見圖4。我們通常所說的“三”。就是指活三而言。如果是死三,將特別指出。死三:即對方有棋子在同一條線相鄰交叉點防守的三;死三分為三種。見圖5。 眠三:是死三的一種特性,它看上去相鄰點沒有對方棋子防守,很像活三,但由于受空間限制,不論如何發(fā)展都不可能稱為活四,故稱為“眠三“。見圖5。圖4 活三 圖5 死三反三:反三不是指一種“三”的形狀,而是指再阻止對方進攻的同時使自己稱為一道活三的反攻,稱為反三。四:四的形狀有三

21、種,它分為:活四,沖四、跳沖四?;钏模涸谕粭l線上相連的四個同色棋子成為“連五”,如圖6所示。圖6 活四沖四:在同一條線上相連的一樣顏色的四個棋子,它與活四不同的是,其中的一端有對方的棋子進行阻擋,它只有再在另一端下一手棋才可形成“連五”。 跳沖四:它的形狀在“四”中是比較特殊的,一般分為兩種,它的特點是同一條線上的同色的四個棋子,有一個或兩個棋子與另外三個或兩個棋子之間有一個交叉點的間隔,它的下一手棋只有下在間隔的交叉點上才能形成“連五”,因此,對方的棋子防守時,也只能阻擋在間隔的交叉點上,見圖7。圖7 跳沖四 圖8 反沖四如圖8,黑棋在1點進攻,形成一子雙殺,這時白棋的妙手是在a位活三,它

22、同時阻擋了黑棋的兩種取勝方法。當黑棋仍在c位跳沖四活三時,白棋即在b位阻斷黑棋沖四并形成反沖四,是黑棋的進攻功虧一簣。一子雙殺:指用同一手棋同時形成兩個勝點的著法。追下取勝:是指白棋逼迫黑棋形成禁手而取勝的方法。自由獲勝:除了追下取勝以外的獲勝方法,稱之為自由取勝。禁手(Forbidden):指黑方一子落下同時形成兩個或兩個以上的活三、沖四或形成長連的棋形,是對局中對黑棋禁止使用的戰(zhàn)術或被判為負的行棋手段,見圖15。白棋無禁手,如果黑子在落下的關鍵的第五子即形成五連的同時,又形成禁手。此時,因黑方已成連五,故禁手失效,黑方勝利。之所以這么規(guī)定也是為了規(guī)比賽,其實我們業(yè)余的棋手,黑白棋子誰先下都

23、不限制,只是先落子會有比較大的優(yōu)勢,另一方始終處于防守的被動狀態(tài)。所以那一方先下子,他就有禁手,這是為了保持公平的一種手段。但是職業(yè)連珠五子棋雖然對黑棋采取了種限制,但是先行的一方優(yōu)勢依然很大。在高段位的比賽中還添加了一些規(guī)定,由于很少用到,就不必詳細敘述了。A B C D E F 圖9 禁手見圖9。A、B、C 中的 x 點為三、三禁手。D、E 中的 X 點為四、四禁手。F中的 X 點為長連禁手。長連:一樣顏色的連續(xù)六子或六子以上。 五子棋攻防五子棋是一項對抗性很強的運動,在開局進入五手兩打后,就開始進入了白刃戰(zhàn),相互爭奪先手,任何一方都不能掉以輕心,要盡可能少犯錯誤,甚至不犯錯誤,否則將會導

24、致速敗。眾所周知,連珠五子,連五為勝。有四才能有五,有三才有四,以此類推。所以,在五子棋的對局眾進攻和防守都是從“二”和“三”的爭奪開始的?!昂玫拈_始是成功的一半”,這條格言用在五子棋里再合適不過了。五子棋的點的選擇十分關鍵。五子棋實際上是通過選擇最佳的落點,加上正確的落子次序,一步一步地占領各個要點,最終獲得勝利。對局的早期,選點的著眼點主要是使本方的棋子保持聯(lián)系,為以后創(chuàng)造盡可能多的成三、成四的機會,同時盡量限制對方成為好形。由于在五子棋對弈過程中,通過行棋落點來控制對方的落點是可能的,比如活三 沖四的應點是可以預知的,完全有可能通過不斷走出這樣的先手來控制對方的著點直至勝利。所以,在對局

25、的后期,就要在精確計算的前提下,盡早發(fā)動攻勢,以取得棋局的控制權,否則一旦貽誤戰(zhàn)機,被對方搶先發(fā)動攻勢,就會成為被控制的一方。當有多個攻擊點可供選擇時,要選擇后續(xù)手段多,又不會被對方反先的著點。如果是黑方,還特別要注意進攻終被對方反擊時出現(xiàn)的各種禁手點的可能性。進攻分為單攻棋和雙攻棋,單攻棋指單線即單行或單向的攻棋子,包括三子攻棋(活三、填四)和四子攻棋(沖四、填五)。而雙攻棋指雙向或雙行的攻棋。包括三、三攻棋(雙活三、雙填四、填四活三);四、三攻棋(沖四活三、沖四填四、填五活三、填五填四);四四攻棋(雙沖四、雙填五、填五沖四)。五子棋的取勝思路是由一個子開始,目標是運用各種方法在棋盤上發(fā)展出

26、五連乃至長連而取勝。在這個發(fā)展過程中必然要經(jīng)過由一子到兩子 兩子到三子 三子到四子的過程。因此說,把各種形狀和各個方面上的二 三 四等子力結構爛熟于胸,做到舉一反三,是學習五子棋的基本功,更是能靈活運用五種取勝技巧的基礎。JavaJava簡介Java是美國Sun公司開發(fā)的語言,它使用解釋器執(zhí)行代碼,因此,無需對源代碼進行任何更改即可在不同計算機上運行,是真正跨平臺的編程開發(fā)語言。Java有以下主要特點:1:簡單(Simple)制定Java的原則之一,是要建立一種結構簡單而且使用容易的系統(tǒng),可以讓用戶不必接受很深的訓練就可以開始設計程序,所以Java的語法盡可能與在當前許多程序設計師都采用的C與

27、C語言相似。并且,Java刪除了C與C+許多極少使用、不易理解或常被混淆的功能,多多重繼承、指針等。2:面向對象(Object-Oriented)面向對象是近年來信息界廣為使用的概念和技術。它有許多良好的特性。對象的封裝性可以使對象的接口定義明確;繼承性可以增加軟件的可重用性,有助于分類與模版設計等。實現(xiàn)面向對象的概念與其各種良好的特性是Java的設計理念之一。3:分布式(Distributed)計算機網(wǎng)絡的發(fā)展使得信息應用朝著分布式的環(huán)境發(fā)展,所以現(xiàn)代的信息開發(fā)語言與環(huán)境要有配合分布式的特性與功能。Java具有一個網(wǎng)絡功能的程序庫,其中包含與如 和FTP等TCP/IP網(wǎng)絡通信協(xié)議整合的能力。

28、4:強壯性(Robust)由Java所編寫的程序要能在各種情況下運行,而且必須具有高的穩(wěn)定性。Java在制定時即加入了能防止存儲器被覆寫和數(shù)據(jù)損壞的相關處理機制。5:安全性(Secure)Java是被設計用于網(wǎng)絡與分布式環(huán)境中的,所以安全性是一個很重要的考慮。Java擁有數(shù)個從簡單到復雜的安全保護措施,能有效地防止病毒的侵入和破壞行為的發(fā)生。6:結構中立性(Architecture Neutral)在網(wǎng)絡上存在許多不同類型的計算機,從中央處理器到操作系統(tǒng)的機構均有很高的差異性。因此要使應用程序在每一種機器上均能運行是相當困難的。針對這個目的,Java的編譯器可以產(chǎn)生一種結構中立的目標碼文件格式

29、字節(jié)碼(Byte Code)。這種字節(jié)碼可以在許多種不同的計算機上運行。7:多線程(Multithreaded)多線程是開發(fā)復雜和功能強大的程序所必須的手段之一,Java同樣支持這個重要功能。一個Java程序的開發(fā)過程如圖10所示。圖10 Java程序的開發(fā)過程源文件:使用一個文本編輯器,如Edit或記事本來編寫源文件。不可使用Word編輯器,因為它含有不可見字符。將編好的源文件保存起來,源文件的擴展名必須是Java。編譯器:源文件要經(jīng)過編譯器(Javac.exe)的編譯生成可擴展名為.Class的字節(jié)碼文件。字節(jié)碼文件是由與平臺無關的二進制碼組成的,執(zhí)行時由解釋器解釋成本地機器碼。運行Jav

30、a程序:Java程序分為兩大類Java應用程序(Application)和Java小應用程序(Applet)。Java應用程序必須通過Java解釋器(java.exe)來解釋執(zhí)行其字節(jié)碼文件;Java小應用程序可通過支持Java標準的瀏覽器來解釋執(zhí)行。Java開發(fā)環(huán)境使用Jcreator開發(fā)環(huán)境必須安裝JDK,我安裝的版本是1.5.0,在環(huán)境變量里新建名為Path的變量名,變量值為D:軟件JAVAbin(根據(jù)JDK的安裝目錄而定)。在命令提示窗口輸入Java -version如果能正確顯示版本號,則表示環(huán)境配置成功。如圖11所示。圖11 環(huán)境變量Jcreator的安裝很簡單,這里不在詳細敘述,

31、把路徑配置好就可以了。如圖12。 圖12 Jcreator IDE 課題詳細研究方法程序結構說明既然是Java Application,要實現(xiàn)網(wǎng)絡對戰(zhàn),故采用C/S模式編寫,程序包含7個獨立的類文件ChessWZQ.java、Group.java、Message.java、Player.java、ServerOneClient.java、Server.java、BoardPanel.java。其中BoardPanel.java主要負責棋盤的初始化,鼠標事件的處理,以與判斷勝負條件。ChessWZQ.java定義了面板上的其他元素,包括玩家列表,標題欄等。也包括了事件處理和人工智能。Server

32、OneClient.java則負責網(wǎng)絡對戰(zhàn)的處理。其他的類都是又這3個主類延伸出去的。在具體實現(xiàn)的時候再介紹其作用。見圖13。圖13五子棋程序流程圖棋盤與棋子的類棋盤棋盤如圖1,具體代碼如下: String line = abcdefgh i jk l mn o;char rowNum1 = 1,2,3,4,5,6,7,8,9;char rowNum2=1,0,1,1,1,2,1,3,1,4,1,5;這部分為棋盤的邊界標識符,是必須要有的。用字符數(shù)組存儲,最后確定位置放上去即可。棋盤的繪制:private static int xp; / 棋子 X坐標 private static int y

33、p; / 棋子Y坐標public void paint(Graphics gc) super.paint(gc); /this.setBackground(Color.gray); /this.invalidate(); gc.setColor(Color.blue); /gc.setColor(new Color(255, 255, 240); /畫橫向標識符 gc.drawString(line,25,15); / 畫豎向標識符 for(int i=0;i9;i+) gc.drawChars(rowNum1,i,1,10,35+i*30); for(int i=9,j=0;i15;i+,j

34、+=2) gc.drawChars(rowNum2,j,2,10,35+i*30); / 畫棋盤 for (int i = 0; i 15; i+) gc.drawLine(30, 30 + i * 30, 450, 30 + i * 30); /行 gc.drawLine(30 + i * 30, 30, 30 + i * 30, 450); /列 gc.drawLine(25, 25, 455, 25); gc.drawLine(25, 25, 25, 455); gc.drawLine(25, 455, 455, 455); gc.drawLine(455, 25, 455, 455);

35、 /面板初始化 for(int i=0;i15;i+) for (int j = 0; j =0&i5;i+) if (clr=boardx-iy) count+; else break; / System.out.println( +x+ , +y+ )+count = +count); if(count=5) return true; for(i=1;x+i15&i15得出前者比后者重要,下子時電腦便會自動選擇“沖四”的點,這里還要說明一點的事,還要考慮四個方向。因為有可能有復合棋型,比如“四三”.從第一步起,不管是哪一方下子,電腦都有以這點為中心搜索9X9的矩陣的所有空白點上棋子的重要性

36、,一顆棋子對棋型影響的大小有9X9。重要看來雖然說進攻和防守的重要性一樣的,但是我認為防守更重要。在估值的時候,必須要考慮棋子的合法落子情況。不同的棋類博弈,其估值必定有極大的差別,各種因為規(guī)則而造成的不同因素影響估值的設計。不同的棋類游戲各有所謂的規(guī)則,規(guī)則中就有博弈雙方都可以走哪些著法。某些博弈游戲很容易就找到合理著法,我所實現(xiàn)的五子棋,它就具有很簡單的落子規(guī)則,即棋盤上所有的空位都可以落子,它們都是合理的著法。但是有些棋類游戲,比如在中國象棋和國際象棋中,情況就有些復雜了,每個棋子都有它特定的著法,電腦下子要考慮自己和玩家的棋型,優(yōu)先防守,如果沒有要防的棋型,則搜索自己的棋型下子。設置重

37、要性,即估值模塊,下面只給出橫向的代碼private void setWeight(int x,int y,int tcolor) int i=RectX1,j=RectY1,value=0,k=0,n=0,flag=0; / - 方向 for(i=RectX1,j=y;i=RectX1 & k5;k+) if(BoardPanel.boardi-kj=tcolor) value+; continue; if(BoardPanel.boardi-kj=0)/black space flag+; break; for(k=1;i+kRectX2 & k5;k+) if(BoardPanel.bo

38、ardi+kj=tcolor) value+; if(BoardPanel.boardi+kj=0) flag+; break; n=weight(value,flag); if(weightBoardijn) weightBoardij=n; 設定相應空位的重要值以后,選取最大的值下子,代碼如下:private void getBiggest(int arr,int x,int y) int temp=new int2; int swt=arr00,tmp=0; for(int i=0;i15;i+) for(int j=0;jswt) temp0=i;temp1=j; swt=arrij;

39、 x=temp0; y=temp1; arrxy=0; 對于特定的棋型,都有一個不同的估值,以此來區(qū)別不同棋型的優(yōu)劣,也以此來決定最終的落子位置。毫無疑問,像已有四子連成一線且還可以繼續(xù)落子的情況,明顯要比只有三個子連成一線的情況要好,或者說優(yōu)先級要更高,對弈雙方對此種棋局,肯定都是把第一種情況放為首要分析的位置上。因此,要使棋手做出這種判斷,就要把第一種情況的估值設置得高。對不同的棋型設置重要值,比如:活四、死四、活三、死三、活二、死二。同理,和判斷勝負一樣下子也要考慮邊界特殊情況,矩形設置如下:private void setRect(int x,int y) if(x-40) RectX1=x-4; else RectX1=0; if(x+414) RectX2=14; else RectX2=x+4; if(y-40) RectY1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論