java課程設(shè)計(jì)--人機(jī)對弈五子棋_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《Java程序設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  學(xué) 院: 理學(xué)院 </p><p>  班 級: </p><p>  姓 名: </p><p&

2、gt;  學(xué) 號: </p><p>  指導(dǎo)教師: </p><p>  課設(shè)時(shí)間: 2015-06-23 至2015-06-25 </p><p>  二O一五 年 六月 二十五 日</p><p>  課程設(shè)計(jì)(論文)任務(wù)書</p><p>  理 學(xué) 院 

3、 信息與計(jì)算科學(xué) ?!I(yè) 2012-2 班</p><p>  一、課程設(shè)計(jì)(論文)題目:   人機(jī)對弈五子棋游戲   </p><p>  二、課程設(shè)計(jì)(論文)工作:</p><p>  自 2015 年 6 月 23 日起至 2015 年 6 月 25日止</p><p>  三、課程設(shè)計(jì)(論文) 地點(diǎn):

4、 5-205 </p><p>  四、課程設(shè)計(jì)(論文)內(nèi)容要求:</p><p>  1.本課程設(shè)計(jì)的目的</p><p> ?。?)使學(xué)生掌握軟件開發(fā)的基本工作流程; </p><p> ?。?)鞏固JAVA程序設(shè)計(jì)課程所學(xué)的內(nèi)容; </p><p> ?。?)培養(yǎng)學(xué)生的計(jì)算機(jī)

5、思維能力以及合作的精神;</p><p> ?。?)培養(yǎng)學(xué)生分析、解決問題的能力;</p><p> ?。?)提高學(xué)生的科技論文寫作能力。 </p><p>  2.課程設(shè)計(jì)的任務(wù)及要求</p><p><b>  1)基本要求:</b></p><p> ?。?)研究課程設(shè)計(jì)任務(wù),并進(jìn)行系統(tǒng)需

6、求分析;</p><p> ?。?)對系統(tǒng)進(jìn)行總體設(shè)計(jì),分解系統(tǒng)功能模塊,進(jìn)行任務(wù)分配,以實(shí)現(xiàn)分工合作;</p><p> ?。?)實(shí)現(xiàn)各功能模塊代碼; </p><p> ?。?)系統(tǒng)組裝,測試、完善系統(tǒng)。</p><p><b>  2)創(chuàng)新要求: </b></p><p>  在基本要求達(dá)到

7、后,可進(jìn)行創(chuàng)新設(shè)計(jì),如改進(jìn)界面、增加功能或進(jìn)行代碼優(yōu)化。</p><p>  3)課程設(shè)計(jì)論文編寫要求</p><p>  (1)要按照書稿的規(guī)格打印謄寫課程設(shè)計(jì)論文</p><p> ?。?)論文包括封面、設(shè)計(jì)任務(wù)書(含評語)、摘要、目錄、設(shè)計(jì)內(nèi)容、設(shè)計(jì)小結(jié)</p><p> ?。?)論文裝訂按學(xué)校的統(tǒng)一要求完成</p>&l

8、t;p><b>  4)參考文獻(xiàn):</b></p><p> ?。?)丁振凡,《JAVA語言程序設(shè)計(jì)》,清華大學(xué)出版社</p><p> ?。?)丁振凡,《JAVA語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題解答》,清華大學(xué)出版社</p><p> ?。?)http://cai.ecjtu.jx.cn/</p><p>  5)課程

9、設(shè)計(jì)進(jìn)度安排</p><p>  內(nèi)容 天數(shù) 地點(diǎn)</p><p>  系統(tǒng)總體設(shè)計(jì) 1 實(shí)驗(yàn)室</p><p>  軟件設(shè)計(jì)及調(diào)試 1 實(shí)驗(yàn)室</p><p>  答辯及撰寫報(bào)告

10、 1 實(shí)驗(yàn)室、圖書館</p><p>  學(xué)生簽名: </p><p>  2015年6月25日</p><p>  課程設(shè)計(jì)(論文)評審意見</p><p>  課程設(shè)計(jì)過程(20分):優(yōu)(?。⒘迹ā。?、中(?。?、一般(?。?、差</p><p>&l

11、t;b> ?。?);</b></p><p>  是否完成調(diào)試,系統(tǒng)運(yùn)行效果(30分):優(yōu)(?。?、良(?。⒅校ā。?、 </p><p>  一般( )、差( );</p><p>  (3)回答問題(20分):優(yōu)(?。⒘迹ā。?、中( )、一般( )、差(?。?lt;/p><p> ?。?)課程設(shè)計(jì)報(bào)告(30分):優(yōu)(

12、 )、良(?。?、中( )、一般(?。?、差</p><p><b> ?。?);</b></p><p> ?。?)格式規(guī)范性及考勤是否降等級:是( )、否(?。?lt;/p><p>  評閱人:      職稱:教授 </p><p>  2015年 6月25日</p><p>  人機(jī)對弈

13、五子棋游戲設(shè)計(jì)</p><p><b>  摘要:</b></p><p>  近些年來五子棋游戲成為了人們的最愛,游戲的下載量很高可以說一直排在前幾位,也是人們?nèi)粘I钪蟹潘蓨蕵返淖類?,特別是最近IT行業(yè)的發(fā)展,人工智能的實(shí)現(xiàn),移動(dòng)客戶端的發(fā)展和普及為我們五子棋游戲的發(fā)展帶來了新的生機(jī),新的高潮,人工智能與五子棋的完美結(jié)合是五子棋的又一項(xiàng)重要發(fā)展,而我們現(xiàn)在開發(fā)的人

14、機(jī)對弈更是掀起了五子棋發(fā)展的新篇章,為五子棋的發(fā)展與傳播提供了新的機(jī)會,但是機(jī)會與挑戰(zhàn)并存,我們相信通過我們對五子棋程序的不斷優(yōu)化和完善,五子棋一定會越來越受到大家的歡迎。</p><p>  本次課程設(shè)計(jì)要求利用Java語言設(shè)計(jì)出一個(gè)人機(jī)對弈五子棋游戲,能實(shí)現(xiàn)人機(jī)對弈五子棋。了解五子棋對弈規(guī)則后,利用本學(xué)期所學(xué)的Java高級圖形界面編程方法的知識,并通過窮舉法,考慮八個(gè)方向連成五子的幾率高低,讓計(jì)算機(jī)具有人工智

15、能,成功設(shè)計(jì)出人機(jī)對弈五子棋的游戲。除了人機(jī)對弈的功能,我們還增加了人人對戰(zhàn)的功能。這項(xiàng)功能使得人與人之間能夠互下五子棋,不僅僅是人與計(jì)算機(jī)對弈。除此之外,還增加了再來一局、認(rèn)輸、悔棋、退出游戲的功能,為了讓游戲功能更加豐富,還增加了棋盤、模式、外觀三個(gè)菜單欄供用戶選擇相應(yīng)功能的菜單項(xiàng)。</p><p><b>  目錄</b></p><p>  1、課程設(shè)計(jì)的目的

16、及目標(biāo)1</p><p>  1.1課程設(shè)計(jì)的目的1</p><p>  1.2課程設(shè)計(jì)的目標(biāo)1</p><p><b>  2、概要設(shè)計(jì)1</b></p><p>  2.1開發(fā)工具及環(huán)境1</p><p>  2.2 任務(wù)及需求分析1</p><p>  2

17、.3 工作原理1</p><p><b>  3、具體實(shí)現(xiàn)2</b></p><p><b>  3.1 類設(shè)計(jì)2</b></p><p>  4、運(yùn)行調(diào)試與分析討論3</p><p>  5、設(shè)計(jì)體會與小結(jié)10</p><p><b>  6、參考文獻(xiàn)

18、10</b></p><p>  附錄:(源程序)10</p><p>  1、課程設(shè)計(jì)的目的及目標(biāo)</p><p>  1.1課程設(shè)計(jì)的目的:</p><p>  本次課程設(shè)計(jì)的目的是為了讓學(xué)生使用java語言編程的知識,通過編寫一個(gè)簡單的五子棋游戲,檢驗(yàn)一個(gè)學(xué)期以來學(xué)習(xí)java語言的收獲成果,以及檢查自己在學(xué)習(xí)java語言的

19、過程中的漏洞來彌補(bǔ)不足,以便以后更好、更熟練地使用java語言來編寫方便、娛樂生活的程序。</p><p>  1.2課程設(shè)計(jì)的目標(biāo):</p><p>  本次課程設(shè)計(jì)所要求的五子棋游戲應(yīng)達(dá)到以下幾方面的要求:</p><p>  1.運(yùn)行程序后即刻出現(xiàn)棋盤并可以開始下棋;</p><p>  2.先手為黑棋,后手為白棋;人為先手,計(jì)算機(jī)為后

20、手;</p><p>  3.程序能響應(yīng)鼠標(biāo)點(diǎn)擊并在相應(yīng)位置畫出棋子;</p><p>  4.計(jì)算機(jī)具有一定的智能,能夠與人進(jìn)行五子棋對弈;</p><p>  5.程序可以正確判斷出局面的勝負(fù)情況并及時(shí)報(bào)出結(jié)果,終止棋局;</p><p>  6.盡可能實(shí)現(xiàn)人人對戰(zhàn)功能。</p><p><b>  2、

21、概要設(shè)計(jì)</b></p><p>  2.1開發(fā)工具及環(huán)境</p><p>  文本編輯器:記事本;</p><p>  運(yùn)行環(huán)境:命令提示符(DOS環(huán)境)。</p><p>  2.2 任務(wù)及需求分析</p><p>  設(shè)計(jì)人機(jī)對弈五子棋程序,實(shí)現(xiàn)人與計(jì)算機(jī)進(jìn)行五子棋對弈,具體任務(wù)如下:</p&g

22、t;<p> ?。?)棋盤布局設(shè)計(jì);</p><p> ?。?)計(jì)算機(jī)下子的算法分析;</p><p> ?。?)編程實(shí)現(xiàn)棋子的繪制以及具體的再來一局、認(rèn)輸、悔棋、退出游戲等功能;</p><p> ?。?)運(yùn)行測試程序,調(diào)試糾正運(yùn)行錯(cuò)誤。</p><p><b>  2.3 工作原理</b></p&

23、gt;<p><b> ?。?)工作過程</b></p><p>  運(yùn)行程序后,首先出現(xiàn)五子棋游戲窗體,用戶點(diǎn)擊游戲菜單項(xiàng),出現(xiàn)相關(guān)子菜單,選擇模式子菜單中的人機(jī)對弈便可進(jìn)入人機(jī)對弈模式。然后移動(dòng)鼠標(biāo),在窗體的棋盤上點(diǎn)擊鼠標(biāo)下子,即可在棋盤中相應(yīng)位置顯示下的對應(yīng)棋子。接下來計(jì)算機(jī)會根據(jù)用戶下的棋,采取窮舉法選擇八個(gè)方向上贏面最大的位置下子,用戶與計(jì)算機(jī)誰先達(dá)到五子連成一線,誰

24、便是獲勝方。若選擇模式子菜單中的人人對戰(zhàn)便可進(jìn)入人人對戰(zhàn)模式。兩個(gè)用戶可同時(shí)玩游戲,同樣誰先達(dá)到五子連成一線,誰便是獲勝方。若下棋過程中,雙方中有一方要認(rèn)輸,便可選擇游戲菜單項(xiàng)中的認(rèn)輸按鈕,認(rèn)輸?shù)囊环斤@然失敗,另外一方獲勝。若雙方中有一方要悔棋,便可選擇游戲菜單項(xiàng)中的悔棋按鈕,經(jīng)過對方的同意后,才能夠重新翻盤,再來一局。若雙方勢均力敵,可選擇游戲菜單項(xiàng)中的棋盤子菜單,點(diǎn)擊大號棋盤或超大號棋盤,以便避免棋盤空間不足造成無法分出勝負(fù)的情況。

25、若覺得窗體外觀不太美觀,可選擇外觀菜單中的三個(gè)選項(xiàng)進(jìn)行選擇。為了顯示程序的相關(guān)制作信息,程序提供了版本菜單進(jìn)行顯示。具體功能實(shí)現(xiàn)見第四章節(jié)圖。</p><p><b> ?。?)工作原理</b></p><p>  利用圖形界面編程實(shí)現(xiàn),利用到的知識點(diǎn)包括:</p><p>  窗體的創(chuàng)建和應(yīng)用界面布局;</p><p>

26、;  事件處理,包括按鈕的動(dòng)作事件處理,鼠標(biāo)事件,窗體事件;</p><p>  接口知識:事件處理中通過接口約束事件監(jiān)聽者必須實(shí)現(xiàn)相應(yīng)接口中定義的方法;</p><p>  流程控制語句:通過條件判斷區(qū)分不同事件源,作不同操作處理。</p><p><b>  3、 具體實(shí)現(xiàn)</b></p><p><b>

27、  3.1 類設(shè)計(jì)</b></p><p>  (1) 類名:ChessFrame</p><p>  作用:創(chuàng)建五子棋游戲主窗體和菜單。</p><p>  該類繼承JFrame類,實(shí)現(xiàn)ActionListener接口。</p><p>  類中含有的方法介紹:</p><p>  ChessFrame(

28、)構(gòu)造方法:構(gòu)造五子棋游戲的主窗體;</p><p>  makeMenu()方法:構(gòu)造五子棋游戲的主菜單;</p><p>  makeMenuItem()方法:構(gòu)造五子棋游戲的菜單項(xiàng);</p><p>  makeRadioButtonMenuItem()方法:構(gòu)造五子棋游戲的單選按鈕式菜單項(xiàng)。</p><p>  (2) 類名:Ches

29、sModel</p><p>  作用:規(guī)定棋盤的寬度、高度、棋盤的模式;規(guī)定棋盤方格的橫向、縱向坐標(biāo)、棋盤方格的橫向、縱向坐標(biāo)所對應(yīng)的棋子顏色;并且規(guī)定了記錄棋盤棋子信息數(shù)組arrMapShow只有4個(gè)值:1,2,3,-1,其中1代表該棋盤方格上下的棋子為黑子,2代表該棋盤方格上下的棋子為白子,3代表為該棋盤方格上沒有棋子,-1代表該棋盤方格不能夠下棋子;定義了交換棋手的標(biāo)識符isOdd,棋盤方格上是否有棋子的

30、標(biāo)識符isExist。</p><p>  類中含有的主要方法介紹:</p><p>  ChessModel()構(gòu)造方法:根據(jù)不同的棋盤模式(modeChess)來構(gòu)建對應(yīng)大小的棋盤;</p><p>  badxy()方法:判斷下子的橫向、縱向坐標(biāo)是否越界;</p><p>  readyplay()方法:判斷該坐標(biāo)位置是否可下棋子;&l

31、t;/p><p>  play()方法:在該坐標(biāo)位置下棋子;</p><p>  computerDo()方法:用窮舉法判斷每一個(gè)坐標(biāo)點(diǎn)的八個(gè)方向的的最大棋子數(shù),最后得出棋子數(shù)最大值的坐標(biāo),計(jì)算機(jī)再下子(這八個(gè)方向分別是:左、右、上、下、左上、左下、右上、右下);</p><p>  checkMax()方法:計(jì)算棋盤上某一方格上八個(gè)方向棋子的最大值;</p>

32、;<p>  showSuccess()方法:贏棋后的提示;</p><p>  showDefeat()方法:輸棋后的提示。</p><p>  (3) 類名:MainPanel</p><p><b>  作用:</b></p><p>  1、構(gòu)建一個(gè)面板,在該面板上畫上棋盤;</p>

33、<p>  2、處理在該棋盤上的鼠標(biāo)事件(如鼠標(biāo)左鍵點(diǎn)擊、鼠標(biāo)右鍵點(diǎn)擊、鼠標(biāo)拖動(dòng)等);</p><p>  該類繼承JPanel類,實(shí)現(xiàn)MouseListener、MouseMotionListener接口。</p><p>  類中含有的主要方法介紹:</p><p>  paintComponent()方法:根據(jù)坐標(biāo)計(jì)算出棋盤方格棋子的信息(如白子還是

34、黑子),然后調(diào)用draw方法在棋盤上畫出相應(yīng)的棋子;</p><p>  mousePressed ()方法:響應(yīng)鼠標(biāo)的點(diǎn)擊事件,根據(jù)鼠標(biāo)的點(diǎn)擊來下棋,根據(jù)下棋判斷勝負(fù)等;</p><p>  mouseMoved()方法:響應(yīng)鼠標(biāo)的拖動(dòng)事件。</p><p>  (4) 類名:FiveChessAppletDemo</p><p>  作用

35、:顯示五子棋游戲窗體。</p><p>  類中含有的方法介紹:</p><p>  main()方法:程序運(yùn)行的入口,創(chuàng)建了ChessFrame類的一個(gè)實(shí)例對象(cf),并啟動(dòng)屏幕顯示顯示該實(shí)例對象。</p><p>  (5) 類名: ChessWindowEvent</p><p>  作用:響應(yīng)退出窗口。</p><

36、;p>  類中含有的方法介紹:</p><p>  windowClosing()方法:處理窗口關(guān)閉;</p><p>  ChessWindowEvent ()構(gòu)造方法:提供無參構(gòu)造方法。</p><p>  4、運(yùn)行調(diào)試與分析討論</p><p>  圖4-1 人機(jī)對弈模式選擇界面</p><p>  圖4-

37、2 人機(jī)對弈界面</p><p>  圖4-3 結(jié)果信息顯示界面</p><p>  圖4-4人人對戰(zhàn)模式選擇界面</p><p><b>  圖4-5 悔棋界面</b></p><p>  圖4-6 悔棋提示界面</p><p>  圖4-7 悔棋后棋盤清空提示界面</p><

38、;p>  圖4-8 悔棋后棋盤清空界面</p><p><b>  圖4-9 認(rèn)輸界面</b></p><p>  圖4-10 認(rèn)輸提示界面</p><p>  圖4-11 認(rèn)輸后結(jié)果信息界面</p><p>  圖4-12 棋盤選擇界面</p><p>  圖4-13 外觀類型選擇界面&l

39、t;/p><p>  圖4-14 版本選擇界面</p><p>  圖4-15 版本信息介紹界面</p><p><b>  5、設(shè)計(jì)體會與小結(jié)</b></p><p>  通過獨(dú)立完成五子棋對弈系統(tǒng)的后,發(fā)現(xiàn)自己在進(jìn)行軟件開發(fā)方面提高不少,同時(shí)積極利用所學(xué)到的新技術(shù)用于自己的設(shè)計(jì)開發(fā)過程。另外,在整個(gè)開發(fā)的過程中,時(shí)間也比

40、較倉促。因此,該系統(tǒng)必然會存在一些缺陷和不足。如:沒有討論五子棋禁手的問題。另一個(gè)就是電腦按即定的算法去與玩家下子。這種算法有“固定”。不太會變,玩家若是仔細(xì)觀察,可以掌握其規(guī)律。還有就是界面不是很華麗有待改進(jìn)。盡管本系統(tǒng)存在著很多不足,但其實(shí)現(xiàn)了最重要的功能就是有人工智能。這也讓我對計(jì)算機(jī)中的人工智能領(lǐng)域有一定的了解。另一個(gè)就在做系統(tǒng)的過程中,我學(xué)到了Java的一些基本結(jié)構(gòu),還有就是對于Java有更深一步的認(rèn)識。</p>

41、<p><b>  6、參考文獻(xiàn)</b></p><p>  [1] 丁振凡,《JAVA語言程序設(shè)計(jì)》,清華大學(xué)出版社.</p><p>  [2] 丁振凡,《JAVA語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題解答》,清華大學(xué)出版社.</p><p>  [3] Charles Petzold. Windows程序設(shè)計(jì)

42、. 北京大學(xué)出版社,2002. </p><p>  [4] 陳明,《Java語言程序設(shè)計(jì)》,清華大學(xué)出版社.</p><p><b>  附錄:(源程序)</b></p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</

43、p><p>  import javax.swing.*;</p><p>  class ChessFrame extends JFrame implements ActionListener{</p><p>  private String[] strsize={"標(biāo)準(zhǔn)棋盤","大號棋盤","超大號棋盤"

44、};</p><p>  private String[] strmode={"人機(jī)對弈","人人對戰(zhàn)"};</p><p>  public static boolean iscomputer=true,checkcomputer=true;</p><p>  private int width,height;</p

45、><p>  private ChessModel cm;</p><p>  private MainPanel mp;</p><p>  public ChessFrame() {</p><p>  this.setTitle("五子棋游戲");</p><p>  cm=new ChessMo

46、del(1);</p><p>  mp=new MainPanel(cm);</p><p>  Container con=this.getContentPane();</p><p>  con.add(mp,"Center");</p><p>  this.setResizable(false);</p&g

47、t;<p>  this.addWindowListener(new ChessWindowEvent());</p><p>  MapSize(14,14);</p><p>  JMenuBar mbar = new JMenuBar();</p><p>  this.setJMenuBar(mbar);</p><p>

48、;  JMenu gameMenu = new JMenu("游戲");</p><p>  mbar.add(makeMenu(gameMenu, new Object[] {</p><p>  "再來一局", null, "棋盤",null,"模式", null,"認(rèn)輸", null,

49、 "悔棋", null, "退出"}, this));</p><p>  JMenu lookMenu =new JMenu("外觀");</p><p>  mbar.add(makeMenu(lookMenu,new Object[] {"類型一","類型二","類型三&qu

50、ot;},this));</p><p>  JMenu helpMenu = new JMenu("版本");</p><p>  mbar.add(makeMenu(helpMenu, new Object[] {"關(guān)于"}, this));</p><p><b>  }</b></p>

51、<p>  public JMenu makeMenu(Object parent, Object items[], Object target){</p><p>  JMenu m = null;</p><p>  if(parent instanceof JMenu)</p><p>  m = (JMenu)parent;</p>

52、<p>  else if(parent instanceof String)</p><p>  m = new JMenu((String)parent);</p><p><b>  else</b></p><p>  return null;</p><p>  for(int i = 0; i

53、< items.length; i++)</p><p>  if(items[i] == null)</p><p>  m.addSeparator();</p><p>  else if(items[i] == "棋盤"){</p><p>  JMenu jm = new JMenu("棋盤&qu

54、ot;);</p><p>  ButtonGroup group=new ButtonGroup();</p><p>  JRadioButtonMenuItem rmenu;</p><p>  for (int j=0;j<strsize.length;j++){</p><p>  rmenu=makeRadioButtonM

55、enuItem(strsize[j],target);</p><p><b>  if (j==0)</b></p><p>  rmenu.setSelected(true);</p><p>  jm.add(rmenu);</p><p>  group.add(rmenu);</p><p&

56、gt;<b>  }</b></p><p>  m.add(jm);</p><p>  }else if(items[i] == "模式"){</p><p>  JMenu jm = new JMenu("模式");</p><p>  ButtonGroup group=n

57、ew ButtonGroup();</p><p>  JRadioButtonMenuItem rmenu;</p><p>  for (int h=0;h<strmode.length;h++){</p><p>  rmenu=makeRadioButtonMenuItem(strmode[h],target);</p><p>

58、;<b>  if(h==0)</b></p><p>  rmenu.setSelected(true);</p><p>  jm.add(rmenu);</p><p>  group.add(rmenu);</p><p><b>  }</b></p><p>  

59、m.add(jm);</p><p><b>  }else</b></p><p>  m.add(makeMenuItem(items[i], target));</p><p><b>  return m;</b></p><p><b>  }</b></p&g

60、t;<p>  public JMenuItem makeMenuItem(Object item, Object target){</p><p>  JMenuItem r = null;</p><p>  if(item instanceof String)</p><p>  r = new JMenuItem((String)item);&

61、lt;/p><p>  else if(item instanceof JMenuItem)</p><p>  r = (JMenuItem)item;</p><p><b>  else</b></p><p>  return null;</p><p>  if(target instanc

62、eof ActionListener)</p><p>  r.addActionListener((ActionListener)target);</p><p><b>  return r;</b></p><p><b>  }</b></p><p>  public JRadioButt

63、onMenuItem makeRadioButtonMenuItem(</p><p>  Object item, Object target){</p><p>  JRadioButtonMenuItem r = null;</p><p>  if(item instanceof String)</p><p>  r = new J

64、RadioButtonMenuItem((String)item);</p><p>  else if(item instanceof JRadioButtonMenuItem)</p><p>  r = (JRadioButtonMenuItem)item;</p><p><b>  else</b></p><p&

65、gt;  return null;</p><p>  if(target instanceof ActionListener)</p><p>  r.addActionListener((ActionListener)target);</p><p><b>  return r;</b></p><p><b

66、>  }</b></p><p>  public void MapSize(int w,int h){</p><p>  setSize(w * 24, h * 27);</p><p>  if(this.checkcomputer)</p><p>  this.iscomputer=true;</p>

67、<p><b>  else</b></p><p>  this.iscomputer=false;</p><p>  mp.setModel(cm);</p><p>  mp.repaint();</p><p><b>  }</b></p><p> 

68、 public boolean getiscomputer(){</p><p>  return this.iscomputer;</p><p><b>  }</b></p><p>  public void restart(){</p><p>  int modeChess = cm.getModeChess

69、();</p><p>  if(modeChess <= 3 && modeChess >= 0){</p><p>  cm = new ChessModel(modeChess);</p><p>  MapSize(cm.getWidth(),cm.getHeight());</p><p><b&g

70、t;  }</b></p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e){</p><p>  String arg=e.getActionCommand();</p><p><b>  try{</

71、b></p><p>  if (arg.equals("類型三"))</p><p>  UIManager.setLookAndFeel(</p><p>  "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");</p><p>  el

72、se if(arg.equals("類型二"))</p><p>  UIManager.setLookAndFeel(</p><p>  "com.sun.java.swing.plaf.motif.MotifLookAndFeel");</p><p><b>  else</b></p>

73、;<p>  UIManager.setLookAndFeel(</p><p>  "javax.swing.plaf.metal.MetalLookAndFeel" );</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p>  }catch(Exceptio

74、n ee){}</p><p>  if(arg.equals("標(biāo)準(zhǔn)棋盤")){</p><p>  this.width=14;</p><p>  this.height=14;</p><p>  cm=new ChessModel(1);</p><p>  MapSize(this.wi

75、dth,this.height);</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p><b>  }</b></p><p>  if(arg.equals("大號棋盤")){</p><p>  this.width=18;&

76、lt;/p><p>  this.height=18;</p><p>  cm=new ChessModel(2);</p><p>  MapSize(this.width,this.height);</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p&

77、gt;<b>  }</b></p><p>  if(arg.equals("超大號棋盤")){</p><p>  this.width=22;</p><p>  this.height=22;</p><p>  cm=new ChessModel(3);</p><p&g

78、t;  MapSize(this.width,this.height);</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p><b>  }</b></p><p>  if(arg.equals("人機(jī)對弈")){</p><p&g

79、t;  this.checkcomputer=true;</p><p>  this.iscomputer=true;</p><p>  cm=new ChessModel(cm.getModeChess());</p><p>  MapSize(cm.getWidth(),cm.getHeight());</p><p>  Swin

80、gUtilities.updateComponentTreeUI(this);</p><p><b>  }</b></p><p>  if(arg.equals("人人對戰(zhàn)")){</p><p>  this.checkcomputer=false;</p><p>  this.iscomp

81、uter=false;</p><p>  cm=new ChessModel(cm.getModeChess());</p><p>  MapSize(cm.getWidth(),cm.getHeight());</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p>&

82、lt;b>  }</b></p><p>  if(arg.equals("再來一局")){</p><p>  restart();</p><p><b>  }</b></p><p>  if(arg.equals("悔棋")){</p>&

83、lt;p>  if(!checkcomputer){</p><p>  int result = JOptionPane.showConfirmDialog(this, (FiveChessAppletDemo.isBlack==false?"白方悔棋,黑方是否同意?":"黑方悔棋,白方是否同意?"));</p><p>  if (resu

84、lt == 0) {</p><p>  JOptionPane.showMessageDialog(this, "雙方同意悔棋決定,棋盤清空!請繼續(xù)...");</p><p>  restart();</p><p><b>  }</b></p><p><b>  }</b&g

85、t;</p><p><b>  }</b></p><p>  if(arg.equals("認(rèn)輸")){</p><p>  int result = JOptionPane.showConfirmDialog(this, "是否認(rèn)輸?");</p><p>  if (res

86、ult == 0) {</p><p>  JOptionPane.showMessageDialog(this,"游戲結(jié)束,"+(FiveChessAppletDemo.isBlack==true?"黑方認(rèn)輸,白方獲勝!":"白方認(rèn)輸,黑方獲勝!"));</p><p><b>  }</b></p&

87、gt;<p><b>  }</b></p><p>  if(arg.equals("關(guān)于"))</p><p>  JOptionPane.showMessageDialog(null, " 制作者:黃甜,熊婷婷,譚飄寶,湯素娟,鄧婷\n 制作時(shí)間:2015年6月25日", "課程設(shè)計(jì)制作介紹&quo

88、t;,JOptionPane.PLAIN_MESSAGE );</p><p>  if(arg.equals("退出"))</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p>

89、<p>  class ChessModel {</p><p>  private int width,height,modeChess;</p><p>  private int x=0,y=0;</p><p>  private int[][] arrMapShow;</p><p>  private boolean i

90、sOdd,isExist;</p><p>  public ChessModel() {}</p><p>  public ChessModel(int modeChess){</p><p>  this.isOdd=true;</p><p>  if(modeChess == 1){PanelInit(14, 14, modeChe

91、ss);}</p><p>  if(modeChess == 2){PanelInit(18, 18, modeChess);}</p><p>  if(modeChess == 3){PanelInit(22, 22, modeChess);}</p><p><b>  }</b></p><p>  priva

92、te void PanelInit(int width, int height, int modeChess){</p><p>  this.width = width;</p><p>  this.height = height;</p><p>  this.modeChess = modeChess;</p><p>  arrMa

93、pShow = new int[width+1][height+1];</p><p>  for(int i = 0; i <= width; i++)</p><p>  for(int j = 0; j <= height; j++)</p><p>  arrMapShow[i][j] = -1;</p><p><

94、b>  }</b></p><p>  public boolean getisOdd(){ return this.isOdd;}</p><p>  public void setisOdd(boolean isodd){</p><p><b>  if(isodd)</b></p><p>  

95、this.isOdd=true;</p><p><b>  else</b></p><p>  this.isOdd=false;</p><p><b>  }</b></p><p>  public boolean getisExist(){ return this.isExist;}&l

96、t;/p><p>  public int getWidth(){return this.width;}</p><p>  public int getHeight(){return this.height;}</p><p>  public int getModeChess(){return this.modeChess;}</p><p>

97、;  public int[][] getarrMapShow(){ return arrMapShow;}</p><p>  private boolean badxy(int x, int y){</p><p>  if(x >= width+20 || x < 0)</p><p>  return true;</p><p

98、>  return y >= height+20 || y < 0;</p><p><b>  }</b></p><p>  public boolean chessExist(int i,int j){</p><p>  if(this.arrMapShow[i][j]==1 || this.arrMapShow[i]

99、[j]==2)</p><p>  return true;</p><p>  return false;</p><p><b>  }</b></p><p>  public void readyplay(int x,int y){</p><p>  if(badxy(x,y))<

100、/p><p><b>  return;</b></p><p>  if (chessExist(x,y))</p><p><b>  return;</b></p><p>  this.arrMapShow[x][y]=3;</p><p><b>  }<

101、;/b></p><p>  public void play(int x,int y){</p><p>  if(badxy(x,y))</p><p><b>  return;</b></p><p>  if(chessExist(x,y)){</p><p>  this.isE

102、xist=true;</p><p><b>  return;</b></p><p><b>  }else</b></p><p>  this.isExist=false;</p><p>  if(getisOdd()){</p><p>  setisOdd(fa

103、lse);</p><p>  this.arrMapShow[x][y]=1;</p><p><b>  }else{</b></p><p>  setisOdd(true);</p><p>  this.arrMapShow[x][y]=2;</p><p><b>  }&l

104、t;/b></p><p><b>  }</b></p><p>  public void computerDo(int width,int height){</p><p>  int max_black,max_white,max_temp,max=0;</p><p>  setisOdd(true);&

105、lt;/p><p>  System.out.println("計(jì)算機(jī)走棋 ...");</p><p>  for(int i = 0; i <= width; i++){</p><p>  for(int j = 0; j <= height; j++){</p><p>  if(!chessExist(i

106、,j)){</p><p>  max_white=checkMax(i,j,2);</p><p>  max_black=checkMax(i,j,1);</p><p>  max_temp=Math.max(max_white,max_black);</p><p>  if(max_temp>max){</p>

107、<p>  max=max_temp;</p><p><b>  this.x=i;</b></p><p><b>  this.y=j;</b></p><p><b>  }</b></p><p><b>  }</b></p&g

108、t;<p><b>  }</b></p><p><b>  }</b></p><p>  setX(this.x);</p><p>  setY(this.y);</p><p>  this.arrMapShow[this.x][this.y]=2;</p>&

109、lt;p><b>  }</b></p><p>  public void setX(int x){ this.x=x;}public void setY(int y){this.y=y;}</p><p>  public int getX(){return this.x;}</p><p>  public int getY(){r

110、eturn this.y;}</p><p>  public int checkMax(int x, int y,int black_or_white){</p><p>  int num=0,max_num,max_temp=0;</p><p>  int x_temp=x,y_temp=y;</p><p>  int x_temp

111、1=x_temp,y_temp1=y_temp;</p><p>  for(int i=1;i<5;i++){</p><p>  x_temp1+=1;</p><p>  if(x_temp1>this.width)</p><p><b>  break;</b></p><p&g

112、t;  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p><b>  break;</b></p><p>

113、<b>  }</b></p><p>  x_temp1=x_temp;</p><p>  for(int i=1;i<5;i++){</p><p>  x_temp1-=1;</p><p>  if(x_temp1<0)</p><p><b>  break;&l

114、t;/b></p><p>  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p><b>  break;<

115、/b></p><p><b>  }</b></p><p><b>  if(num<5)</b></p><p>  max_temp=num;</p><p>  x_temp1=x_temp;</p><p>  y_temp1=y_temp;</

116、p><p><b>  num=0;</b></p><p>  for(int i=1;i<5;i++){</p><p>  y_temp1-=1;</p><p>  if(y_temp1<0)</p><p><b>  break;</b></p>

117、;<p>  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p><b>  break;</b></p>

118、<p><b>  }</b></p><p>  y_temp1=y_temp;</p><p>  for(int i=1;i<5;i++){</p><p>  y_temp1+=1;</p><p>  if(y_temp1>this.height)</p><p>

119、;<b>  break;</b></p><p>  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p>&

120、lt;b>  break;</b></p><p><b>  }</b></p><p>  if(num>max_temp&&num<5)</p><p>  max_temp=num;</p><p>  x_temp1=x_temp;</p><p

121、>  y_temp1=y_temp;</p><p><b>  num=0;</b></p><p>  for(int i=1;i<5;i++){</p><p>  x_temp1-=1;</p><p>  y_temp1-=1;</p><p>  if(y_temp1<

122、;0 || x_temp1<0)</p><p><b>  break;</b></p><p>  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>

123、;  else</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  x_temp1=x_temp;</p><p>  y_temp1=y_temp;</p><p>  for(int i=1;i

124、<5;i++){</p><p>  x_temp1+=1;</p><p>  y_temp1+=1;</p><p>  if(y_temp1>this.height || x_temp1>this.width)</p><p><b>  break;</b></p><p&g

125、t;  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p><b>  break;</b></p><p>

126、<b>  }</b></p><p>  if(num>max_temp&&num<5)</p><p>  max_temp=num;</p><p>  x_temp1=x_temp;</p><p>  y_temp1=y_temp;</p><p><b

127、>  num=0;</b></p><p>  for(int i=1;i<5;i++){</p><p>  x_temp1+=1;</p><p>  y_temp1-=1;</p><p>  if(y_temp1<0 || x_temp1>this.width)</p><p&g

128、t;<b>  break;</b></p><p>  if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p>

129、<b>  break;</b></p><p><b>  }</b></p><p>  x_temp1=x_temp;</p><p>  y_temp1=y_temp;</p><p>  for(int i=1;i<5;i++){</p><p>  x_te

130、mp1-=1;</p><p>  y_temp1+=1;</p><p>  if(y_temp1>this.height || x_temp1<0)</p><p><b>  break;</b></p><p>  if(this.arrMapShow[x_temp1][y_temp1]==black

131、_or_white)</p><p><b>  num++;</b></p><p><b>  else</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if

132、(num>max_temp&&num<5)</p><p>  max_temp=num;</p><p>  max_num=max_temp;</p><p>  return max_num;</p><p><b>  }</b></p><p>  publi

133、c boolean judgeSuccess(int x,int y,boolean isodd){</p><p>  int num=1;</p><p>  int arrvalue;</p><p>  int x_temp=x,y_temp=y;</p><p><b>  if(isodd)</b></

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論