版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
- 五子棋java課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--五子棋人機(jī)對弈
- java五子棋畢業(yè)設(shè)計(jì)--java五子棋對弈程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)--五子棋游戲
- java課程設(shè)計(jì)--對戰(zhàn)五子棋
- java課程設(shè)計(jì)-五子棋游戲
- java課程設(shè)計(jì)報(bào)告-五子棋
- 人機(jī)對弈五子棋游戲畢業(yè)設(shè)計(jì)
- 五子棋java語言課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---java 五子棋游戲設(shè)計(jì)
- 五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)五子棋(附源代碼)
- java_五子棋小游戲課程設(shè)計(jì)
- 五子棋-課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---單機(jī)版五子棋
- 五子棋對弈系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)論文---五子棋人機(jī)對弈系統(tǒng)(vc++)
評論
0/150
提交評論