JAVA五子棋編程設計_第1頁
JAVA五子棋編程設計_第2頁
JAVA五子棋編程設計_第3頁
JAVA五子棋編程設計_第4頁
JAVA五子棋編程設計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄摘 要1關鍵詞:1Abstract1Key words:1第一章:緒論21.1 前 言2第二章 五子棋的相關基礎22.1五子棋解釋22.2五子棋基本規(guī)則32.3五子棋常用術語3第三章 開發(fā)工具、環(huán)境及其技術53.1 JAVA簡介53.2 JAVA 編程環(huán)境:7第四章 程序具體研究方法74.1程序設計思路74.2程序設計94.3程序的運行結果17結 語18參考文獻19致 謝19摘 要五子棋作為一個棋類競技運動,在民間十分流行,為了熟悉五子棋規(guī)則及技巧,以及研究簡單的人工智能,決定用Java開發(fā)五子棋游戲。主要完成了人機對戰(zhàn)和玩家之間聯網對戰(zhàn)2個功能。網絡連接部分為Socket編程應用,客戶

2、端和服務器端的交互用Class Message定義,有很好的可擴展性,客戶端負責界面維護和收集用戶輸入的信息,及錯誤處理。服務器維護在線用戶的基本信息和任意兩個對戰(zhàn)用戶的棋盤信息,動態(tài)維護用戶列表。在人機對弈中通過深度搜索和估值模塊,來提高電腦棋手的智能。分析估值模塊中的影響精準性的幾個要素,以及提出若干提高精準性的辦法,以及對它們搜索的節(jié)點數進行比較,在這些算法的基礎上分析一些提高電腦AI方案,如遞歸算法、電腦學習等。算法的研究有助于理解程序結構,增強邏輯思維能力,在其他人工智能方面也有很大的參考作用。關鍵詞: 深度搜索;估值;電腦AI;五子棋;算法AbstractAs a sport, g

3、obang is very popular in civil, in order to become familiar with gobang rules 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 Prog

4、ramming for some applications, client and server interaction is definited by 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

5、 two-time users of the chessboard of information, dynamic maintenance user list. 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,

6、and compares their search for nodes, which raises some computer AI programs on 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 grea

7、t references. Key words: Search depth; Valuation; Computer AI; Gobang ; Algorithm第一章:緒論1.1 前 言電腦已經深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設計、圖形圖像處理、教育培訓以及游戲娛樂等。Windows系統(tǒng)的推出使電腦從高雅的學術殿堂走入了尋常百姓家,各行各業(yè)的人們無須經過特別的訓練就能夠使用電腦完成許許多多復雜的工作。然而,雖然現在世界上已經充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。Java語言作為一種面向對象的編程語言

8、,具有分布式,可移植,高性能,多線程等特點。通過系統(tǒng)的學習,人們就可以使用它開發(fā)出功能齊全,滿足特殊需求的應用程序。Java語言易學易用,對學習者掌握技能,開拓思維都有很大的幫助。 我作為一名學生,在系統(tǒng)的學習了Java語言之后,經常用它搞一些小程序。這次畢業(yè)設計,正好將學過的Java語言中的各種技術綜合起來,用Jbuilder2006開發(fā)工具編寫一個小游戲,既對自己學過的技能進行一次檢驗,也能系統(tǒng)地將學過的知識復習鞏固。隨著計算機技術的不斷發(fā)展,網絡技術的普及范圍越來越廣,網絡能夠提供的服務多樣、便捷,已經成為人們生產生活中不可缺少的重要組成部分。如今網絡休閑游戲發(fā)展迅速,它憑借健康、方便、

9、互動性強、益智等諸多優(yōu)點,成為大部分現代人休閑娛樂的首選。網絡五子棋游戲是使用Java語言開發(fā)的一款游戲。它使用SOCKET建立連接,多線程處理數據,以及可嵌入網絡瀏覽器的ALET作為客戶端,這些特點使這款游戲無論是服務器還是客戶端的實現都相對容易。通過對該軟件的編寫,還可以鞏固我們對以上各種知識的掌握和理解。第二章 五子棋的相關基礎2.1五子棋解釋引用辭海中所言,五子棋是“棋類游戲,棋具與圍棋相同,兩人對局,輪流下子,先將五子連成一行者為勝。”。五子棋的名稱:日文亦有“連五子、五子連、串珠、五目、五目碰、五格、五石、五法、五聯、京棋”等多種稱謂,英文則稱之為FIR (Five In A Ro

10、w的縮寫)、Gomoku(日語“五目”的羅馬拼音)、Gobang、connect 5、mo-rphion。捷克語piskvorky,韓語omok、韓國人還稱之為情侶棋2.2五子棋基本規(guī)則 1.五子棋行棋時,黑棋先下第一子,由天元開始,后白棋在黑棋周圍的交叉點的落子。接著黑方再以天元中心的25個交叉點的范圍內落盤面的第三子,之后黑白雙方相互順序子。 2.最先在棋盤線交點橫向,縱向,斜向形成已方的五個棋子連續(xù)的一方為勝。 3.出現禁手對方指出后將判負,其中包括兩個或兩個以上的活三,活四,長連均稱之為禁手。 4.禁手只對黑棋有效,白棋無禁手。 5.黑方禁手形成時,白方需立即指出,黑方將被判負。若白方

11、未發(fā)現黑方禁手存在而繼續(xù)應子,其后指出黑方禁手不能判黑方負。 6.黑方連五與禁手同時形成,因黑方已連成五即黑方已獲勝,故禁手規(guī)則失效。 7.在對局中,在盤上落下的子又拿起來,此動作稱為拔子,若拔子將被判為負。 8.在對局中棋子掉落在棋盤上將被判負。若推子或蹭子,以盤面第一落點為準。用手將棋子推正不算違犯規(guī)則。 9.在對局中,一方自行中止比賽如:中途退場,將被判負。 10.在對局中對方宣布認輸,本局獲勝。 11.超過比賽規(guī)定所用時間限制,將被判為負:正式比賽期間,遲到時間超過比賽容許時間將被判負。 12.如下至最終一子仍不分勝負則定為平局。 13.中盤期間雙方 同意和局提議,判定為平局。2.3五

12、子棋常用術語1.著:也稱“步”。對局中把一個棋子按照規(guī)則放到某一交叉點,稱之為一著棋。一著是否完成有兩種規(guī)則: (1)在執(zhí)行落子無悔規(guī)則是,以行棋者的手離開棋子為一著已完成。 (2)在執(zhí)行限時規(guī)則時,以行棋者按下棋鐘作為一著已完成。 2.PASS :五子棋中引入的英文名稱,即應該行棋的一方主動放棄此次行棋的機會,由對方繼續(xù)行棋。 3.先手:對方必須應答的著法,如對方形成活三必須阻止其形成活四。 4.絕對先手:相對先手而言,即形成同色連四或嵌五,對方必須應著,就是絕對先手。絕對先手又叫“沖”。 5.VCF:(Victory of Continus Four 的縮寫) 意思是利用連續(xù)沖四取勝之意。

13、利用連續(xù)不斷的沖四或嵌五的絕對先手,制止形成連五獲得勝利的一種方法。在對局接近尾聲或排局解題中一種常見的取勝技巧。 6.追下取勝:是指白棋利用黑棋禁手取勝的戰(zhàn)術。白1 沖四,迫使黑2 形成“四、四”禁手( 即沖四,活四禁手), 這種取勝方法叫做追下取勝。 7.自由取勝:追下取勝以外的取勝方法,即未利用黑棋禁手戰(zhàn)術而取勝。 8.一子雙殺:是指對局中一方落子后出現兩個叫殺點即兩個獲勝點,而使對方無法防守的情形。一般是有兩個沖四活三點,白棋的雙活三,雙四均可稱為一子雙殺。 9.陽線:棋盤上可見的橫線與直線的總稱。 10. 陰線:也稱“斜線”。是棋盤上不可見的斜行線。 11. “四、三”:指同時具備兩

14、個先手,其中一個四,另一個是活三。 12. “活三”、“嵌五”、“沖四”:參見五子棋重要棋形講座。 13. 禁手:對局中禁止使用的戰(zhàn)術或被判為負的行棋手段。 14. 開局:也稱“布局”。布局階段大體為七至十幾著之內。種類繁多,職業(yè)連珠五子棋有二十四種開局。 15. 局面:亦稱“局勢”。為對局中某一段時間內雙方子力的配置情況。 16. 優(yōu)勢:是指足以取勝的優(yōu)勢局面,其對方即為敗勢。 17. 妙著:對局中走出的一步精妙的著法。既合乎邏輯又出人意料,有使局面頓時改觀的效果,對局勢的發(fā)展及對局的質量都有重大影響。 18. 好著:也稱“佳著”。對局中成功的某一步。 19. 正著:對局的某一局面中的正確著

15、法。 20. 劣著:對局中,導致嚴重不利后果的一步錯誤著法。 21. 敗著:也稱“失著”“漏著”。對局中造成局面惡化的一步嚴重錯誤著法。 22. 等著:對局中具有等待性的一步著法,主要意圖是等待有利時機。 23. 廢著:也稱“空著”。對局中不起作用的著法。實際上指浪費時間毫無疑義的錯著。 24. 搶先:對局中利用反活三或沖四的強制手段奪取主動權的著法。 25. 打譜:按照棋譜演練著法,是提高棋藝水平的重要方法之一。 26. 復局:也叫“復著”。對局結束又重演對局的過程。一般用以研究、比較雙方的成敗得失和著法的優(yōu)劣。第三章 開發(fā)工具、環(huán)境及其技術3.1 JAVA簡介JAVA技術介紹:Java技術

16、是一門編程語言,也是一個平臺,它基于Java虛擬機技術,借助這個東西建立了跨平臺的優(yōu)勢。(題外話:Java熱門的原因之一就是一個跨平臺的概念,和跨平臺類似跨瀏覽器的好處也是如此,這也是現在AJAX技術流行的原因之一。另外現在熱炒的RIA富客戶端的概念下的技術除了AJAX外還有Adobe的Flash/Flex,微軟的Silver Light,SUN的JavaFX等,個人更看好FLash/Flex,原因是Flash插件在瀏覽器端占用率很高)Java技術的重要性就不講了,從最近流行的一個統(tǒng)計數據上來說,目前世界上編程語言Java 、C 、VB、C+依次排名前4位,這排名本身不說明什么,至少也是工業(yè)界

17、對編程語言使用上一個側面的反映吧。Java編程語言與眾不同之處在于:Java程序既是編譯型的(轉換為一種稱為Java字節(jié)碼的中間語言),又是解釋型的(JVM 對字節(jié)碼進行解析和運行)。編譯只進行一次,而解釋在每次運行程序時都會進行。編譯后的字節(jié)碼采用一種針對JVM 優(yōu)化過的機器碼形式;解釋器是JVM 的實現。這段是摘自網上的,編譯原理學的不是很好,對這門語言的背后運行機制理解到這樣了。Java平臺是一種純軟件平臺,它有三個版本Java SE、JavaEE、Java ME。Java SE(Java Platform,Standard Edition)這個版本以前叫做J2SE,后來版本號從1.4直

18、接跳到5.0,其實也就是1.5,所以就叫成Java SE 5.0。目前Java開發(fā)人員使用較多的版本是5.0,當然還有Java SE 6.0這個更新的版本。它允許開發(fā)和部署在桌面、服務器、嵌入式環(huán)境和實時環(huán)境中使用的Java 應用程序。Java SE還包含了支持Java Web服務開發(fā)的類,并為Java EE這個版本提供基礎。雖說桌面應用程序,Java一直不被看好,但也稍微提一下,負責桌面GUI開發(fā)的類庫我知道的有:JDK自帶的主要是AWT/SWING這個Java原生類庫;也可以使用IBM的SWT/JFace這個第三方類庫。開發(fā)工具我了解的有:NetBeans(最近已經是6.0final版了,

19、做GUI有使用VB的感覺),Eclipse(SWT/JFace這個項目其實就是做Eclipse項目時擴展出來的,所以對SWT/JFace支持的也不錯)。Java EE(Java Platform,Enterprise Edition)這個版本以前叫做J2EE,也就是大家可能聽得比較多的,也是Java比較流行的領域,Java的企業(yè)級版本。Java EE下有很多流行的開發(fā)框架,像Struts、Spring、Hibernate這種流行的所謂SSH組合等。根據項目大小、應用領域,技術平臺的選擇面還是很多的,除了Java EE,還有.Net,LAMP組合(Linux、Apatch、MySql、PHP組合

20、),相對來說比較新Ruby在Ruby on Rails的框架應用,后兩者可能在相對來說比較輕量級的Web領域運用成功案例比較多,更重量的企業(yè)級潛力還有待挖掘。Java ME(Java Platform,Micro Edition)這個版本以前叫做J2ME。應用領域像各種移動設備和嵌入式設備,比如:手機、PDA、電視機頂盒和打印機。Java ME不是太熟悉,不過移動設備和嵌入式設備的開發(fā)個人覺得算是比較有意思的領域,最近比較矚目的業(yè)界新聞有一個就是Google發(fā)布開源智能手機操作系統(tǒng)開發(fā)平臺Android,也就是前一陣子炒得很火的GPhone(原來Google出的不是手機,而是一個手機操作系統(tǒng)開

21、發(fā)平臺)。這個平臺貌似會對Java ME有些沖擊,按照網上的消息,Android包括:1、高度定制的Linux操作系統(tǒng)內核及智能手機硬件驅動支持;2、經過Google修改過的Java虛擬機Dalvik,這里的性能比SUN的Hotspot高,支持大部分Java核心類庫;3、大量智能手機開發(fā)核心類庫;4、大量現成的智能手機應用軟件;5、基于Eclipse的開發(fā)環(huán)境。也是按照網上的說法,Java EE提供了統(tǒng)一的編程平臺,但不能調用操作系統(tǒng)的資源;而Android下直達操作系統(tǒng),上直達應用軟件,如:瀏覽器、日歷、地圖等。Java開發(fā)工具很多,個人使用的IDE有Eclipse和NetBeans。Ecl

22、ispe比較流行,各種插件也多,當然用起來也不錯;NetBeans現在也是越做越好了,介紹這兩個IDE主要是開源的,當然還有其它工具如JBuilder、IntelliJ、JCreator。這些IDE各有優(yōu)勢劣勢,根據你開發(fā)的項目來選擇了。3.2 JAVA 編程環(huán)境:3.2.1 環(huán)境變量(1) java(TM) SE Development Kits,即JDK (2)設置環(huán)境變量 右擊 我的電腦-屬性-高級-環(huán)境變量 Path:系統(tǒng)在任何路徑下都可以識別Java命令需要設置的變量 Path: ;C:Progran Filesjavajdk1.6.0_01bin classpath:為java加載

23、類(包括class,lib)的路徑,只有類在classpath中, Java命令才能識別 classpath: .;Progran Filesjavajdk1.6.0_01libdt.jar ;Progran Filesjavajdk1.6.0_01libtools.jar JAVA_HOME:java的安裝路徑 JAVA_HOME: Progran Filesjavajdk1.6.0_013.2.2 Eclipse插件 (1) XMLBuddy:編輯xml文件;下載地址為 (2) Fat Jar:打包插件,可以方便的完成各種打包任務,可以包含外部的包等; (3) Log4E:Log4j插件,

24、提供各種與log4j相關的任務,Log4j專用于為程序輸入調試信息 (4) Lomboz:Ecilpse的一個J2EE的插件,可以將很多java應用服務器,J2EE組件和 web應用開發(fā)集成到Eclipse中,可以幫助Java開發(fā)者使用Eclipse建立,測試和 部署J2ee應用。支持jsp編寫,包括語法著色和語法檢查: (5) MyEclipse:J2EE開發(fā)插件,支持jsp,EJB,數據庫操作; (6) TomcatPlugin:支持Tomcat插件; 第四章 程序具體研究方法4.1程序設計思路4.1.1程序設計思想1.本程序要實現五子棋的游戲功能,必須先有一個棋盤,所以,通過繼承JPan

25、el,然后在JPanel上畫出一個18*18的棋盤,另外還有三個按鈕:重新開局、請黑方下子和請白方下子,提醒用戶進行相應的操作。當然,JPanel必須放在JFrame中,所以,又通過繼承JFrame得到一個實例;2.對于下棋的操作,通過對JPanel增加鼠標事件監(jiān)聽器MouseListener,每次當用戶點擊鼠標時,先取得點擊的坐標值,然后取整得到一個對應棋盤的最近的一個坐標值;3.判斷該坐標是否在棋盤之外,如果不是,記錄下該坐標值以進行下一步操作。4.判斷該位置是否已有棋子,沒有的話用類Graphics2D畫出棋子,并記錄下棋盤的狀態(tài);5.判斷該顏色棋子的上下左右是否滿足連續(xù)五個,是的話提醒

26、相應玩家獲勝,不是的話,更換玩家,監(jiān)聽事件處理結束。6.對于玩家的更換是程序自動的,每次用戶點擊鼠標后,都會變換玩家,從而畫出對應黑方白方的棋子供玩家查看。4.1.2程序設計分析1. 鍵盤上事先設定8個按鍵,分作兩組,每組四個,分別代表兩個人用來控制棋子的上下左右鍵。2. 繪制棋盤,15條橫線,15條豎線,在直線交點處下棋子(實心圓形)。3. 黑子先行,黑白交替下子,在棋盤上設定一個與棋盤格大小邊長相等的正方形,初始狀態(tài),正方形的中心位于期盼的中心點。當一方欲走棋的時候,應用四個按鍵來控制所要下棋的位置,每按一次按鍵,正方形都要向相應方向移動一個格,并且讓喇叭發(fā)出某種聲音,將要移出邊界時,發(fā)出

27、另一種警告聲音并不讓其移出邊界。當按下回車鍵時,應在正方形所在位置放下一個棋子,然后此組按鍵不能操作,換另一個人下棋,用另一組按鍵,規(guī)則同前。4. 當任何一方有五個棋子沿著橫,豎,斜連在一起時,系統(tǒng)自動判斷贏棋,并顯示黑方或白方勝利。棋局結束后,任何一方均不能繼續(xù)操作。5.程序流程如下圖4-1:圖4-1程序流程圖4.2 程序設計import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.HeadlessException;i

28、mport java.awt.Point;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.*;public class ChessGame public

29、 static void main(String args) GameFrame GFrame = new GameFrame();GFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);GFrame.setVisible(true);class GameFrame extends JFrame private static final int Width = 430;private static final int Height = 470;GameFrame() setTitle(五子棋游戲);CenteredFrame();setSiz

30、e(Width, Height);GamePanel Gpanel = new GamePanel();add(Gpanel);void CenteredFrame() Toolkit kit = Toolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSize();int screenHeight = screenSize.height;int screenWidth = screenSize.width;int Xposition = (screenWidth - Width) / 2;int Yposition =

31、(screenHeight - Height) / 2;setLocation(Xposition, Yposition);class GamePanel extends JPanel private Point cursor = new Point(40, 60); / 棋盤坐標private int ChessState = new int1818;/ 棋盤狀態(tài)private int i = 0;/ 橫坐標private int j = 0;/ 縱坐標private final static int testnum = 5;/ 五子棋的規(guī)定棋子數private Player Black =

32、 new Player(1, Color.BLACK, 黑方);/ 黑方棋子private Player White = new Player(2, Color.WHITE, 白方);/ 白方棋子private Player Cplayer = null;/ 當前用戶的引用private JTextField textBlack = new JTextField(, 5);/ 黑方文本提示框對象和文本長度設置private JTextField textWhite = new JTextField(, 5);/ 白方文本提示框對象和文本長度設置private String Nothing =

33、;private String textblack = 請黑方下子;/ 黑方提示文本private String textwhite = 請白方下子;/ 白方提示文本GamePanel() setLayout(null);Initialization();setFocusable(true);JButton Rutton = new JButton(重新開局);Rutton.setBounds(20, 14, 100, 26);RestartListener restart = new RestartListener();Rutton.addActionListener(restart);ad

34、d(Rutton);textBlack.setHorizontalAlignment(JTextField.CENTER);textBlack.setBounds(150, 14, 110, 26);textBlack.setEditable(false);add(textBlack);textWhite.setHorizontalAlignment(JTextField.CENTER);textWhite.setBounds(290, 14, 110, 26);textWhite.setEditable(false);add(textWhite);ChessManMouseListener

35、mlistener = new ChessManMouseListener();addMouseListener(mlistener);/ 設置第一個JTextField輸出請黑方下棋,坐標為(40,60)void Initialization() for (int i = 0, j; i 18; i+)for (j = 0; j 18; j+) ChessStateij = 0;cursor.setLocation(40, 60);Cplayer = Black;textBlack.setText(textblack);textWhite.setText(Nothing);/ 畫棋盤和初始化

36、棋局狀態(tài)protected void paintComponent(Graphics g) super.paintComponent(g);Graphics2D g2 = (Graphics2D) g;for (int i = 60; i = 400; i += 20) g2.drawLine(40, i, 380, i);for (int j = 40; j = 380; j += 20) g2.drawLine(j, 60, j, 400);for (i = 0; i 18; i+)for (j = 0; j 18; j+) if (ChessStateij != 0) if (Chess

37、Stateij = 1) g2.setPaint(Black.getplayerChessManColor();if (ChessStateij = 2) g2.setPaint(White.getplayerChessManColor();g2.fillOval(j * 20 + 40 - 10, i * 20 + 60 - 10,ChessMan.getChessManSize(), ChessMan.getChessManSize();/ 判斷棋盤的當前位置是否已有棋子boolean isChessState() this.j = (cursor.x - 40) / 20;this.i

38、= (cursor.y - 60) / 20;if (ChessStatethis.ithis.j != 0)return true;elsereturn false;/ 記錄落子后棋盤的當前位置的狀態(tài)void RecordChessState() this.j = (cursor.x - 40) / 20;this.i = (cursor.y - 60) / 20;ChessStatethis.ithis.j = Cplayer.getCurrentIdentify();/ 判斷當前玩家落子后是否贏了void JudgeWin() for (int i = 0; i 4; i+)if (Ju

39、dgeWinLine(i) / 提示當前玩家已經獲得勝利try String Ginformation = GameInformation;String Message = 恭喜玩家 + Cplayer.getsIdentify()+ 獲勝! + n + 繼續(xù)游戲還是退出游戲?;String options = 繼續(xù), 退出 ;int selection = JOptionPane.showOptionDialog(null,Message, Ginformation,JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE, null

40、, options,options0);/ throws HeadlessExceptionif (selection = JOptionPane.OK_OPTION) Initialization();repaint();return;if (selection = JOptionPane.NO_OPTION) System.exit(0);/ 退出程序 catch (HeadlessException e) e.printStackTrace();/ 如果當前方沒有贏棋則雙方輪換ChangeCurrentPlayer();/ 在當前方向上是否有連續(xù)的五只棋子boolean JudgeWin

41、Line(int direction) int i, j, di, dj, count;i = j = di = dj = count = 0;switch (direction) case 0:j = this.j - (testnum - 1);i = this.i;dj = 1;di = 0;break;case 1:j = this.j;i = this.i - (testnum - 1);dj = 0;di = 1;break;case 2:j = this.j - (testnum - 1);i = this.i + (testnum - 1);dj = 1;di = -1;bre

42、ak;case 3:j = this.j - (testnum - 1);i = this.i - (testnum - 1);dj = 1;di = 1;break;for (int k = 0; k = 0 & j = 0 & i = testnum)return true; elsecount = 0;j += dj;i += di;return false;/ 更換當前玩家void ChangeCurrentPlayer() if (Cplayer = Black) Cplayer = White;textBlack.setText(Nothing);textWhite.setText

43、(textwhite); else Cplayer = Black;textBlack.setText(textblack);textWhite.setText(Nothing);/ 重新開局監(jiān)聽器private class RestartListener implements ActionListener public void actionPerformed(ActionEvent arg0) Initialization();repaint();requestFocus();private class ChessManMouseListener implements MouseListe

44、ner public void mouseClicked(MouseEvent event) int x = (int)(Math.round(event.getX() / 20.0)*20);int y = (int)(Math.round(event.getY() / 20.0)*20);if (x = 40 & x = 60 & y = 400) cursor.x = x;cursor.y = y;if (!isChessState() Cplayer.PerformChessMan();RecordChessState();repaint();JudgeWin();/ 判定當前落子后是

45、否贏棋repaint();public void mouseEntered(MouseEvent arg0) public void mouseExited(MouseEvent arg0) public void mousePressed(MouseEvent arg0) public void mouseReleased(MouseEvent arg0) class ChessMan private static final int ChessManSize = 20;private Color ChessManColor;ChessMan(Color c) ChessManColor =

46、 c;static int getChessManSize() return ChessManSize;Color getChessManColor() return ChessManColor;class Player private int identify;private ChessMan pChessMan;private String PlayerStringIdentify;Player(int identify, Color c, String sIdentify) this.identify = identify;pChessMan = new ChessMan(c);this

47、.PlayerStringIdentify = sIdentify;int getCurrentIdentify() return identify;String getsIdentify() return PlayerStringIdentify;void PerformChessMan() Color getplayerChessManColor() return pChessMan.getChessManColor();4.3程序的運行結果 下面是游戲運行后的結果截圖如下圖4-2:圖4-2游戲運行結束黑方獲勝結 語論文行文至此,已基本完成。本論文研究主要完成了如下工作:回顧了Java的發(fā)展歷程及一些基本概念;(1) 對“五子棋游戲”進行了分析設計。對此該游戲的算法進行了設計。算法是在每個項目中都會出現的都需要去設計的,故一個好的算法設計是必不可少的。(2) 介紹了此游戲的功能模塊。網絡游

溫馨提示

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

評論

0/150

提交評論