課程設(shè)計(jì)論文任務(wù)書_第1頁(yè)
課程設(shè)計(jì)論文任務(wù)書_第2頁(yè)
課程設(shè)計(jì)論文任務(wù)書_第3頁(yè)
課程設(shè)計(jì)論文任務(wù)書_第4頁(yè)
課程設(shè)計(jì)論文任務(wù)書_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)(論文)任務(wù)書 理 學(xué)院信息與計(jì)算科學(xué) 專業(yè) 2012-2班一、課程設(shè)計(jì)(論文)題目: 人機(jī)對(duì)弈五子棋游戲 二、課程設(shè)計(jì)(論文)工作:自 2015 年 6 月 23 日起至 2015 年 6 月 25日止三、課程設(shè)計(jì)(論文) 地點(diǎn): 5-205 四、課程設(shè)計(jì)(論文)內(nèi)容要求:1本課程設(shè)計(jì)的目的(1)使學(xué)生掌握軟件開發(fā)的基本工作流程; (2)鞏固JAVA程序設(shè)計(jì)課程所學(xué)的內(nèi)容; (3)培養(yǎng)學(xué)生的計(jì)算機(jī)思維能力以及合作的精神;(4)培養(yǎng)學(xué)生分析、解決問題的能力;(5)提高學(xué)生的科技論文寫作能力。 2課程設(shè)計(jì)的任務(wù)及要求1)基本要求:(1)研究課程設(shè)計(jì)任務(wù),并進(jìn)行系統(tǒng)需求分析;(2)對(duì)系統(tǒng)進(jìn)

2、行總體設(shè)計(jì),分解系統(tǒng)功能模塊,進(jìn)行任務(wù)分配,以實(shí)現(xiàn)分工合作;(3)實(shí)現(xiàn)各功能模塊代碼; (4)系統(tǒng)組裝,測(cè)試、完善系統(tǒng)。2)創(chuàng)新要求: 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),如改進(jìn)界面、增加功能或進(jìn)行代碼優(yōu)化。3)課程設(shè)計(jì)論文編寫要求(1)要按照書稿的規(guī)格打印謄寫課程設(shè)計(jì)論文(2)論文包括封面、設(shè)計(jì)任務(wù)書(含評(píng)語(yǔ))、摘要、目錄、設(shè)計(jì)內(nèi)容、設(shè)計(jì)小結(jié)(3)論文裝訂按學(xué)校的統(tǒng)一要求完成4)參考文獻(xiàn):(1)丁振凡,JAVA語(yǔ)言程序設(shè)計(jì),清華大學(xué)出版社(2)丁振凡,JAVA語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題解答,清華大學(xué)出版社(3)5)課程設(shè)計(jì)進(jìn)度安排內(nèi)容 天數(shù) 地點(diǎn)系統(tǒng)總體設(shè)計(jì) 1 實(shí)驗(yàn)室軟件設(shè)計(jì)及調(diào)試 1 實(shí)驗(yàn)

3、室答辯及撰寫報(bào)告 1 實(shí)驗(yàn)室、圖書館 學(xué)生簽名: 2015年6月25日課程設(shè)計(jì)(論文)評(píng)審意見(1) 課程設(shè)計(jì)過程(20分):優(yōu)()、良()、中()、一般()、差( );(2) 是否完成調(diào)試,系統(tǒng)運(yùn)行效果(30分):優(yōu)()、良()、中()、 一般( )、差( );(3)回答問題(20分):優(yōu)()、良()、中()、一般()、差();(4)課程設(shè)計(jì)報(bào)告(30分):優(yōu)()、良()、中()、一般()、差( );(5)格式規(guī)范性及考勤是否降等級(jí):是()、否() 評(píng)閱人: 職稱:教授 2015年 6月25日人機(jī)對(duì)弈五子棋游戲設(shè)計(jì)摘要:近些年來五子棋游戲成為了人們的最愛,游戲的下載量很高可以說一直排在前幾位

4、,也是人們?nèi)粘I钪蟹潘蓨蕵返淖類?,特別是最近IT行業(yè)的發(fā)展,人工智能的實(shí)現(xiàn),移動(dòng)客戶端的發(fā)展和普及為我們五子棋游戲的發(fā)展帶來了新的生機(jī),新的高潮,人工智能與五子棋的完美結(jié)合是五子棋的又一項(xiàng)重要發(fā)展,而我們現(xiàn)在開發(fā)的人機(jī)對(duì)弈更是掀起了五子棋發(fā)展的新篇章,為五子棋的發(fā)展與傳播提供了新的機(jī)會(huì),但是機(jī)會(huì)與挑戰(zhàn)并存,我們相信通過我們對(duì)五子棋程序的不斷優(yōu)化和完善,五子棋一定會(huì)越來越受到大家的歡迎。本次課程設(shè)計(jì)要求利用Java語(yǔ)言設(shè)計(jì)出一個(gè)人機(jī)對(duì)弈五子棋游戲,能實(shí)現(xiàn)人機(jī)對(duì)弈五子棋。了解五子棋對(duì)弈規(guī)則后,利用本學(xué)期所學(xué)的Java高級(jí)圖形界面編程方法的知識(shí),并通過窮舉法,考慮八個(gè)方向連成五子的幾率高低,讓計(jì)算

5、機(jī)具有人工智能,成功設(shè)計(jì)出人機(jī)對(duì)弈五子棋的游戲。除了人機(jī)對(duì)弈的功能,我們還增加了人人對(duì)戰(zhàn)的功能。這項(xiàng)功能使得人與人之間能夠互下五子棋,不僅僅是人與計(jì)算機(jī)對(duì)弈。除此之外,還增加了再來一局、認(rèn)輸、悔棋、退出游戲的功能,為了讓游戲功能更加豐富,還增加了棋盤、模式、外觀三個(gè)菜單欄供用戶選擇相應(yīng)功能的菜單項(xiàng)。 目錄1、課程設(shè)計(jì)的目的及目標(biāo)11.1課程設(shè)計(jì)的目的11.2課程設(shè)計(jì)的目標(biāo)12、概要設(shè)計(jì)12.1開發(fā)工具及環(huán)境12.2 任務(wù)及需求分析12.3 工作原理13、具體實(shí)現(xiàn)23.1 類設(shè)計(jì)24、運(yùn)行調(diào)試與分析討論35、設(shè)計(jì)體會(huì)與小結(jié)106、參考文獻(xiàn)10附錄:(源程序)101、課程設(shè)計(jì)的目的及目標(biāo)1.1課程

6、設(shè)計(jì)的目的:本次課程設(shè)計(jì)的目的是為了讓學(xué)生使用java語(yǔ)言編程的知識(shí),通過編寫一個(gè)簡(jiǎn)單的五子棋游戲,檢驗(yàn)一個(gè)學(xué)期以來學(xué)習(xí)java語(yǔ)言的收獲成果,以及檢查自己在學(xué)習(xí)java語(yǔ)言的過程中的漏洞來彌補(bǔ)不足,以便以后更好、更熟練地使用java語(yǔ)言來編寫方便、娛樂生活的程序。1.2課程設(shè)計(jì)的目標(biāo):本次課程設(shè)計(jì)所要求的五子棋游戲應(yīng)達(dá)到以下幾方面的要求:1.運(yùn)行程序后即刻出現(xiàn)棋盤并可以開始下棋;2.先手為黑棋,后手為白棋;人為先手,計(jì)算機(jī)為后手;3.程序能響應(yīng)鼠標(biāo)點(diǎn)擊并在相應(yīng)位置畫出棋子;4.計(jì)算機(jī)具有一定的智能,能夠與人進(jìn)行五子棋對(duì)弈;5.程序可以正確判斷出局面的勝負(fù)情況并及時(shí)報(bào)出結(jié)果,終止棋局;6.盡可

7、能實(shí)現(xiàn)人人對(duì)戰(zhàn)功能。2、概要設(shè)計(jì)2.1開發(fā)工具及環(huán)境文本編輯器:記事本;運(yùn)行環(huán)境:命令提示符(DOS環(huán)境)。2.2 任務(wù)及需求分析設(shè)計(jì)人機(jī)對(duì)弈五子棋程序,實(shí)現(xiàn)人與計(jì)算機(jī)進(jìn)行五子棋對(duì)弈,具體任務(wù)如下:(1)棋盤布局設(shè)計(jì);(2)計(jì)算機(jī)下子的算法分析;(3)編程實(shí)現(xiàn)棋子的繪制以及具體的再來一局、認(rèn)輸、悔棋、退出游戲等功能;(4)運(yùn)行測(cè)試程序,調(diào)試糾正運(yùn)行錯(cuò)誤。2.3 工作原理(1)工作過程運(yùn)行程序后,首先出現(xiàn)五子棋游戲窗體,用戶點(diǎn)擊游戲菜單項(xiàng),出現(xiàn)相關(guān)子菜單,選擇模式子菜單中的人機(jī)對(duì)弈便可進(jìn)入人機(jī)對(duì)弈模式。然后移動(dòng)鼠標(biāo),在窗體的棋盤上點(diǎn)擊鼠標(biāo)下子,即可在棋盤中相應(yīng)位置顯示下的對(duì)應(yīng)棋子。接下來計(jì)算機(jī)會(huì)

8、根據(jù)用戶下的棋,采取窮舉法選擇八個(gè)方向上贏面最大的位置下子,用戶與計(jì)算機(jī)誰先達(dá)到五子連成一線,誰便是獲勝方。若選擇模式子菜單中的人人對(duì)戰(zhàn)便可進(jìn)入人人對(duì)戰(zhàn)模式。兩個(gè)用戶可同時(shí)玩游戲,同樣誰先達(dá)到五子連成一線,誰便是獲勝方。若下棋過程中,雙方中有一方要認(rèn)輸,便可選擇游戲菜單項(xiàng)中的認(rèn)輸按鈕,認(rèn)輸?shù)囊环斤@然失敗,另外一方獲勝。若雙方中有一方要悔棋,便可選擇游戲菜單項(xiàng)中的悔棋按鈕,經(jīng)過對(duì)方的同意后,才能夠重新翻盤,再來一局。若雙方勢(shì)均力敵,可選擇游戲菜單項(xiàng)中的棋盤子菜單,點(diǎn)擊大號(hào)棋盤或超大號(hào)棋盤,以便避免棋盤空間不足造成無法分出勝負(fù)的情況。若覺得窗體外觀不太美觀,可選擇外觀菜單中的三個(gè)選項(xiàng)進(jìn)行選擇。為了

9、顯示程序的相關(guān)制作信息,程序提供了版本菜單進(jìn)行顯示。具體功能實(shí)現(xiàn)見第四章節(jié)圖。(2)工作原理利用圖形界面編程實(shí)現(xiàn),利用到的知識(shí)點(diǎn)包括:q 窗體的創(chuàng)建和應(yīng)用界面布局;q 事件處理,包括按鈕的動(dòng)作事件處理,鼠標(biāo)事件,窗體事件;q 接口知識(shí):事件處理中通過接口約束事件監(jiān)聽者必須實(shí)現(xiàn)相應(yīng)接口中定義的方法;q 流程控制語(yǔ)句:通過條件判斷區(qū)分不同事件源,作不同操作處理。.介紹還不夠細(xì),如何表示棋盤上棋子的狀態(tài)沒涉及3、 具體實(shí)現(xiàn)3.1 類設(shè)計(jì)(1) 類名:ChessFrame作用:創(chuàng)建五子棋游戲主窗體和菜單。該類繼承JFrame類,實(shí)現(xiàn)ActionListener接口。類中含有的方法介紹:q ChessF

10、rame()構(gòu)造方法:構(gòu)造五子棋游戲的主窗體;q makeMenu()方法:構(gòu)造五子棋游戲的主菜單;q makeMenuItem()方法:構(gòu)造五子棋游戲的菜單項(xiàng);q makeRadioButtonMenuItem()方法:構(gòu)造五子棋游戲的單選按鈕式菜單項(xiàng)。(2) 類名:ChessModel作用:規(guī)定棋盤的寬度、高度、棋盤的模式;規(guī)定棋盤方格的橫向、縱向坐標(biāo)、棋盤方格的橫向、縱向坐標(biāo)所對(duì)應(yīng)的棋子顏色;并且規(guī)定了記錄棋盤棋子信息數(shù)組arrMapShow只有4個(gè)值:1,2,3,-1,其中1代表該棋盤方格上下的棋子為黑子,2代表該棋盤方格上下的棋子為白子,3代表為該棋盤方格上沒有棋子,-1代表該棋盤方

11、格不能夠下棋子;定義了交換棋手的標(biāo)識(shí)符isOdd,棋盤方格上是否有棋子的標(biāo)識(shí)符isExist。類中含有的主要方法介紹:q ChessModel()構(gòu)造方法:根據(jù)不同的棋盤模式(modeChess)來構(gòu)建對(duì)應(yīng)大小的棋盤;q badxy()方法:判斷下子的橫向、縱向坐標(biāo)是否越界;q readyplay()方法:判斷該坐標(biāo)位置是否可下棋子;q play()方法:在該坐標(biāo)位置下棋子;q computerDo()方法:用窮舉法判斷每一個(gè)坐標(biāo)點(diǎn)的八個(gè)方向的的最大棋子數(shù),最后得出棋子數(shù)最大值的坐標(biāo),計(jì)算機(jī)再下子(這八個(gè)方向分別是:左、右、上、下、左上、左下、右上、右下);q checkMax()方法:計(jì)算棋

12、盤上某一方格上八個(gè)方向棋子的最大值;q showSuccess()方法:贏棋后的提示;q showDefeat()方法:輸棋后的提示。(3) 類名:MainPanel作用:1、構(gòu)建一個(gè)面板,在該面板上畫上棋盤;2、處理在該棋盤上的鼠標(biāo)事件(如鼠標(biāo)左鍵點(diǎn)擊、鼠標(biāo)右鍵點(diǎn)擊、鼠標(biāo)拖動(dòng)等);該類繼承JPanel類,實(shí)現(xiàn)MouseListener、MouseMotionListener接口。類中含有的主要方法介紹:q paintComponent()方法:根據(jù)坐標(biāo)計(jì)算出棋盤方格棋子的信息(如白子還是黑子),然后調(diào)用draw方法在棋盤上畫出相應(yīng)的棋子;q mousePressed ()方法:響應(yīng)鼠標(biāo)的點(diǎn)擊

13、事件,根據(jù)鼠標(biāo)的點(diǎn)擊來下棋,根據(jù)下棋判斷勝負(fù)等;q mouseMoved()方法:響應(yīng)鼠標(biāo)的拖動(dòng)事件。(4) 類名:FiveChessAppletDemo作用:顯示五子棋游戲窗體。類中含有的方法介紹:q main()方法:程序運(yùn)行的入口,創(chuàng)建了ChessFrame類的一個(gè)實(shí)例對(duì)象(cf),并啟動(dòng)屏幕顯示顯示該實(shí)例對(duì)象。(5) 類名: ChessWindowEvent作用:響應(yīng)退出窗口。類中含有的方法介紹:q windowClosing()方法:處理窗口關(guān)閉;q ChessWindowEvent ()構(gòu)造方法:提供無參構(gòu)造方法。4、運(yùn)行調(diào)試與分析討論 圖4-1 人機(jī)對(duì)弈模式選擇界面 圖4-2 人

14、機(jī)對(duì)弈界面 圖4-3 結(jié)果信息顯示界面 圖4-4人人對(duì)戰(zhàn)模式選擇界面 圖4-5 悔棋界面 圖4-6 悔棋提示界面 圖4-7 悔棋后棋盤清空提示界面 圖4-8 悔棋后棋盤清空界面 圖4-9 認(rèn)輸界面 圖4-10 認(rèn)輸提示界面圖4-11 認(rèn)輸后結(jié)果信息界面 圖4-12 棋盤選擇界面 圖4-13 外觀類型選擇界面 圖4-14 版本選擇界面 圖4-15 版本信息介紹界面.界面介紹有些多5、設(shè)計(jì)體會(huì)與小結(jié) 通過獨(dú)立完成五子棋對(duì)弈系統(tǒng)的后,發(fā)現(xiàn)自己在進(jìn)行軟件開發(fā)方面提高不少,同時(shí)積極利用所學(xué)到的新技術(shù)用于自己的設(shè)計(jì)開發(fā)過程。另外,在整個(gè)開發(fā)的過程中,時(shí)間也比較倉(cāng)促。因此,該系統(tǒng)必然會(huì)存在一些缺陷和不足。如

15、:沒有討論五子棋禁手的問題。另一個(gè)就是電腦按即定的算法去與玩家下子。這種算法有“固定”。不太會(huì)變,玩家若是仔細(xì)觀察,可以掌握其規(guī)律。還有就是界面不是很華麗有待改進(jìn)。盡管本系統(tǒng)存在著很多不足,但其實(shí)現(xiàn)了最重要的功能就是有人工智能。這也讓我對(duì)計(jì)算機(jī)中的人工智能領(lǐng)域有一定的了解。另一個(gè)就在做系統(tǒng)的過程中,我學(xué)到了Java的一些基本結(jié)構(gòu),還有就是對(duì)于Java有更深一步的認(rèn)識(shí)。6、參考文獻(xiàn)1 丁振凡,JAVA語(yǔ)言程序設(shè)計(jì),清華大學(xué)出版社.2 丁振凡,JAVA語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與習(xí)題解答,清華大學(xué)出版社.3 Charles Petzold. Windows程序設(shè)計(jì).

16、0;北京大學(xué)出版社,2002. 4 陳明,Java語(yǔ)言程序設(shè)計(jì),清華大學(xué)出版社.附錄:(源程序).要添加一些注釋import java.awt.*;import java.awt.event.*;import javax.swing.*;class ChessFrame extends JFrame implements ActionListenerprivate String strsize="標(biāo)準(zhǔn)棋盤","大號(hào)棋盤","超大號(hào)棋盤"private String strmode="人機(jī)對(duì)弈","

17、;人人對(duì)戰(zhàn)"public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPanel mp;public ChessFrame() this.setTitle("五子棋游戲"); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,"Center"

18、); this.setResizable(false); this.addWindowListener(new ChessWindowEvent(); MapSize(14,14); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戲"); mbar.add(makeMenu(gameMenu, new Object "再來一局", null, "棋盤",null,"模式", null,&quo

19、t;認(rèn)輸", null, "悔棋", null, "退出", this); JMenu lookMenu =new JMenu("外觀"); mbar.add(makeMenu(lookMenu,new Object "類型一","類型二","類型三",this); JMenu helpMenu = new JMenu("版本"); mbar.add(makeMenu(helpMenu, new Object "關(guān)于", th

20、is);public JMenu makeMenu(Object parent, Object items, Object target) JMenu m = null; if(parent instanceof JMenu) m = (JMenu)parent; else if(parent instanceof String) m = new JMenu(String)parent); else return null; for(int i = 0; i < items.length; i+) if(itemsi = null) m.addSeparator(); else if(i

21、temsi = "棋盤") JMenu jm = new JMenu("棋盤"); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;j<strsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if (j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(it

22、emsi = "模式") JMenu jm = new JMenu("模式"); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int h=0;h<strmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(m

23、akeMenuItem(itemsi, target); return m;public JMenuItem makeMenuItem(Object item, Object target) JMenuItem r = null; if(item instanceof String) r = new JMenuItem(String)item); else if(item instanceof JMenuItem) r = (JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionLis

24、tener(ActionListener)target); return r;public JRadioButtonMenuItem makeRadioButtonMenuItem( Object item, Object target) JRadioButtonMenuItem r = null; if(item instanceof String) r = new JRadioButtonMenuItem(String)item); else if(item instanceof JRadioButtonMenuItem) r = (JRadioButtonMenuItem)item; e

25、lse return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target); return r; public void MapSize(int w,int h) setSize(w * 24, h * 27); if(this.checkcomputer) this.iscomputer=true; else this.iscomputer=false; mp.setModel(cm); mp.repaint(); public boolean getiscomputer()

26、 return this.iscomputer; public void restart() int modeChess = cm.getModeChess(); if(modeChess <= 3 && modeChess >= 0) cm = new ChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight(); public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try if (arg.equals(&q

27、uot;類型三") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); else if(arg.equals("類型二") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); else UIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAn

28、dFeel" ); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.equals("標(biāo)準(zhǔn)棋盤") this.width=14; this.height=14; cm=new ChessModel(1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("大號(hào)棋盤") this.width=18; this.height=

29、18; cm=new ChessModel(2); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("超大號(hào)棋盤") this.width=22; this.height=22; cm=new ChessModel(3); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人機(jī)對(duì)弈") th

30、is.checkcomputer=true; this.iscomputer=true; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人人對(duì)戰(zhàn)") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidt

31、h(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("再來一局") restart(); if(arg.equals("悔棋") if(!checkcomputer) int result = JOptionPane.showConfirmDialog(this, (FiveChessAppletDemo.isBlack=false?"白方悔棋,黑方是否同意?":"黑方悔棋,白方是否同意?"); if (resu

32、lt = 0) JOptionPane.showMessageDialog(this, "雙方同意悔棋決定,棋盤清空!請(qǐng)繼續(xù)."); restart(); if(arg.equals("認(rèn)輸") int result = JOptionPane.showConfirmDialog(this, "是否認(rèn)輸?"); if (result = 0) JOptionPane.showMessageDialog(this,"游戲結(jié)束,"+(FiveChessAppletDemo.isBlack=true?"黑方認(rèn)輸

33、,白方獲勝!":"白方認(rèn)輸,黑方獲勝!"); if(arg.equals("關(guān)于") JOptionPane.showMessageDialog(null, " 制作者:黃甜,熊婷婷,譚飄寶,湯素娟,鄧婷n 制作時(shí)間:2015年6月25日", "課程設(shè)計(jì)制作介紹",JOptionPane.PLAIN_MESSAGE ); if(arg.equals("退出") System.exit(0);class ChessModel private int width,height,modeCh

34、ess;private int x=0,y=0;private int arrMapShow;private boolean isOdd,isExist;public ChessModel() public ChessModel(int modeChess) this.isOdd=true; if(modeChess = 1)PanelInit(14, 14, modeChess); if(modeChess = 2)PanelInit(18, 18, modeChess); if(modeChess = 3)PanelInit(22, 22, modeChess);private void

35、PanelInit(int width, int height, int modeChess) this.width = width; this.height = height; this.modeChess = modeChess; arrMapShow = new intwidth+1height+1; for(int i = 0; i <= width; i+)for(int j = 0; j <= height; j+) arrMapShowij = -1;public boolean getisOdd() return this.isOdd;public void set

36、isOdd(boolean isodd) if(isodd) this.isOdd=true; else this.isOdd=false;public boolean getisExist() return this.isExist;public int getWidth()return this.width;public int getHeight()return this.height;public int getModeChess()return this.modeChess;public int getarrMapShow() return arrMapShow;private bo

37、olean badxy(int x, int y) if(x >= width+20 | x < 0) return true; return y >= height+20 | y < 0;public boolean chessExist(int i,int j) if(this.arrMapShowij=1 | this.arrMapShowij=2) return true; return false;public void readyplay(int x,int y) if(badxy(x,y) return; if (chessExist(x,y) retur

38、n; this.arrMapShowxy=3;public void play(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) this.isExist=true; return; else this.isExist=false; if(getisOdd() setisOdd(false); this.arrMapShowxy=1; else setisOdd(true); this.arrMapShowxy=2; public void computerDo(int width,int height) int max_black,m

39、ax_white,max_temp,max=0; setisOdd(true); System.out.println("計(jì)算機(jī)走棋 ."); for(int i = 0; i <= width; i+) for(int j = 0; j <= height; j+) if(!chessExist(i,j) max_white=checkMax(i,j,2); max_black=checkMax(i,j,1); max_temp=Math.max(max_white,max_black); if(max_temp>max) max=max_temp; t

40、his.x=i; this.y=j; setX(this.x); setY(this.y); this.arrMapShowthis.xthis.y=2;public void setX(int x) this.x=x;public void setY(int y)this.y=y;public int getX()return this.x;public int getY()return this.y;public int checkMax(int x, int y,int black_or_white) int num=0,max_num,max_temp=0; int x_temp=x,

41、y_temp=y; int x_temp1=x_temp,y_temp1=y_temp; for(int i=1;i<5;i+) x_temp1+=1; if(x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; x_temp1=x_temp; for(int i=1;i<5;i+) x_temp1-=1; if(x_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=black_or_whi

42、te) num+; else break; if(num<5) max_temp=num; x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i<5;i+) y_temp1-=1; if(y_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; y_temp1=y_temp; for(int i=1;i<5;i+) y_temp1+=1; if(y_temp1>this.height) break; i

43、f(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(num>max_temp&&num<5) max_temp=num; x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i<5;i+) x_temp1-=1; y_temp1-=1; if(y_temp1<0 | x_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; el

44、se break; x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<5;i+) x_temp1+=1; y_temp1+=1; if(y_temp1>this.height | x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(num>max_temp&&num<5) max_temp=num; x_temp1=x_temp; y_temp1=y_temp; nu

45、m=0; for(int i=1;i<5;i+) x_temp1+=1; y_temp1-=1; if(y_temp1<0 | x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<5;i+) x_temp1-=1; y_temp1+=1; if(y_temp1>this.height | x_temp1<0) break; if(th

46、is.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(num>max_temp&&num<5) max_temp=num; max_num=max_temp; return max_num;public boolean judgeSuccess(int x,int y,boolean isodd) int num=1; int arrvalue; int x_temp=x,y_temp=y; if(isodd) arrvalue=2; else arrvalue=1; int x_temp1

47、=x_temp,y_temp1=y_temp; for(int i=1;i<6;i+) x_temp1+=1; if(x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; x_temp1=x_temp; for(int i=1;i<6;i+) x_temp1-=1; if(x_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(num=5) r

48、eturn true; x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i+) y_temp1-=1; if(y_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; y_temp1=y_temp; for(int i=1;i<6;i+) y_temp1+=1; if(y_temp1>this.height) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) n

49、um+; else break; if(num=5) return true; x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i+) x_temp1-=1; y_temp1-=1; if(y_temp1<0 | x_temp1<0) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<6;i+) x_temp1+=1; y_temp1

50、+=1; if(y_temp1>this.height | x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(num=5) return true; x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i<6;i+) x_temp1+=1; y_temp1-=1; if(y_temp1<0 | x_temp1>this.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; x_temp1=x_temp; y_temp1=y_temp; for(int i=1;i<6;i+) x_temp1-=1; y_temp1+=1; if(y_temp1>this.height | x_temp1<0) break; if(this.arrMap

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論