課程設計(論文)任務書_第1頁
課程設計(論文)任務書_第2頁
課程設計(論文)任務書_第3頁
課程設計(論文)任務書_第4頁
課程設計(論文)任務書_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 課程設計(論文)任務書 信息工程 學院學院物聯(lián)網(wǎng)工程 專專業(yè)業(yè) 2016-2班班一、課程設計一、課程設計( (論文論文) )題目:題目: 人機對弈五子棋游戲 二、課程設計二、課程設計( (論文論文) )工作:工作:自 20182018 年 1212 月 2424 日起至 20182018 年 1212 月 2828 日止三、課程設計三、課程設計( (論文論文) ) 地點地點: : 5-202 四、課程設計四、課程設計( (論文論文) )內(nèi)容要求:內(nèi)容要求:1 1本課程設計的目的本課程設計的目的(1)使學生掌握軟件開發(fā)的基本工作流程; (2)鞏固 JAVA 程序設計課程所學的內(nèi)容; (3)培養(yǎng)

2、學生的計算機思維能力以及合作的精神;(4)培養(yǎng)學生分析、解決問題的能力;(5)提高學生的科技論文寫作能力。 2 2課程設計的任務及要求課程設計的任務及要求1 1)基本要求:)基本要求:(1)研究課程設計任務,并進行系統(tǒng)需求分析;(2)對系統(tǒng)進行總體設計,分解系統(tǒng)功能模塊,進行任務分配,以實現(xiàn)分工合作;(3)實現(xiàn)各功能模塊代碼; (4)系統(tǒng)組裝,測試、完善系統(tǒng)。2 2)創(chuàng)新要求:)創(chuàng)新要求: 在基本要求達到后,可進行創(chuàng)新設計,如改進界面、增加功能或進行代碼優(yōu)化。 3 3)課程設計論文編寫要求)課程設計論文編寫要求(1)要按照書稿的規(guī)格打印謄寫課程設計論文(2)論文包括封面、設計任務書(含評語)、

3、摘要、目錄、設計內(nèi)容、設計小結(3)論文裝訂按學校的統(tǒng)一要求完成4 4)參考文獻:)參考文獻:(1)丁振凡,JAVA 語言程序設計(第 2 版),清華大學出版社(2)丁振凡,JAVA 語言程序設計實驗指導與習題解答,清華大學出版社(3)http:/ 5)課程設計進度安排)課程設計進度安排內(nèi)容內(nèi)容 天數(shù)天數(shù) 地點地點系統(tǒng)總體設計 1 實驗室軟件設計及調(diào)試 1 實驗室答辯及撰寫報告 1 實驗室、圖書館 學生簽名:學生簽名: 2015 年 6 月 25 日課程設計課程設計( (論文論文) )評審意見評審意見(1) 課程設計過程(20 分):優(yōu)()、良()、中()、一般()、差( );(2) 是否完成

4、調(diào)試,系統(tǒng)運行效果(30 分):優(yōu)()、良()、中()、 一般( )、差( );(3)回答問題(20 分):優(yōu)()、良()、中()、一般()、差();(4)課程設計報告(30 分):優(yōu)()、良()、中()、一般()、差 ( );(5)格式規(guī)范性及考勤是否降等級:是()、否() 評閱人評閱人: 職稱職稱:教授 2018 年 12 月 29 日 目錄目錄1 1、課程設計的目的及目標、課程設計的目的及目標 .1 11.1 課程設計的目的:課程設計的目的:.1 11.2 課程設計的目標:課程設計的目標:.1 12 2、概要設計、概要設計 .1 12.1 開發(fā)工具及環(huán)境開發(fā)工具及環(huán)境.1 12.2 任務

5、及需求分析任務及需求分析 .1 12.3 工作原理工作原理 .2 23 3、 具體實現(xiàn)具體實現(xiàn) .3 33.1 類設計類設計 .3 34 4、運行調(diào)試與分析討論、運行調(diào)試與分析討論 .5 55 5、設計體會與小結、設計體會與小結 .8 86 6、參考文獻、參考文獻 .9 9附錄:(源程序)附錄:(源程序) .9 911、課程設計的目的及目標1.1 課程設計的目的:課程設計的目的:本次課程設計的目的是為了讓學生使用 java 語言編程的知識,JAVA 是一門編程語言也是一個平臺,它基于 JAV 虛擬機技術,借助這個東西建立了跨平臺優(yōu)勢JAVA 編程語言與眾不同之處在于:JAV 程序既是編譯型的(

6、轉(zhuǎn)換為一種 JAVA字節(jié)碼的中間語言),又是解釋型(JVM 對字節(jié)碼進行解析和運行)。編譯只進行一次,而解釋在每次運行程序時都會進行。編譯后的字節(jié)碼采用一種針對 JVM 優(yōu)化過的機器碼形式;解釋器是 JVM 的實現(xiàn)。我們需要利用 JAVA 開發(fā)平臺,學習和鞏固 JAVA 知識,了解類與對象的關系,繪圖以及事件處理原則。 1.2 課程設計的目標:課程設計的目標:本次課程設計所要求的五子棋游戲應達到以下幾方面的要求:(1)運行程序后即刻出現(xiàn)棋盤并可以開始下棋;(2)人機對弈時,先手為黑棋,后手為白棋;人為先手,計算機為后手;(3)程序能響應鼠標點擊并在相應位置畫出棋子;(4)計算機具有一定的智能,

7、能夠與人進行五子棋對弈;(5)程序可以正確判斷出局面的勝負情況并及時報出結果,終止棋局;(6)盡可能實現(xiàn)人人對戰(zhàn)功能;(7)重新開始:在游戲途中,可以選擇重新開始,中斷游戲并重新開始。2、概要設計2.1 開開發(fā)發(fā)工具及環(huán)境工具及環(huán)境裝有 eclipse 的計算機一臺。2.2 任務及需求分析任務及需求分析設計人機對弈五子棋程序,實現(xiàn)人與計算機進行五子棋對弈,具體任務如下:(1)棋盤布局設計;(2)能進行基本的五子棋操作,有圖形界面,能夠用鼠標進行操作;(3)編程實現(xiàn)棋子的繪制;(4)增加具體的功能如重開一局等功能; 2(5)勝負判斷的功能,程序能對下棋的結果進行判斷,分出勝負,并顯示獲勝方;(6

8、)運行測試程序,調(diào)試糾正運行錯誤。(7)游戲內(nèi)容:采用無“禁手”的規(guī)則,相同顏色的棋子,五子一線為勝。2.3 工作原理工作原理(1)工作過程運行程序后,首先出現(xiàn)五子棋游戲窗體,用戶點擊游戲菜單項,出現(xiàn)相關子菜單,選擇模式子菜單中的人機對弈便可進入人機對弈模式。然后移動鼠標,在窗體的棋盤上點擊鼠標下子,即可在棋盤中相應位置顯示下的對應棋子。接下來計算機會根據(jù)用戶下的棋,采取窮舉法選擇八個方向上贏面最大的位置下子,用戶與計算機誰先達到五子連成一線,誰便是獲勝方。若選擇模式子菜單中的人人對戰(zhàn)便可進入人人對戰(zhàn)模式。兩個用戶可同時玩游戲,同樣誰先達到五子連成一線,誰便是獲勝方。若雙方勢均力敵,可選擇游戲

9、菜單項中的棋盤子菜單,點擊大號棋盤或超大號棋盤,以便避免棋盤空間不足造成無法分出勝負的情況。若覺得窗體外觀不太美觀,可選擇外觀菜單中的三個選項進行選擇。為了顯示程序的相關制作信息,程序提供了版本菜單進行顯示。具體功能實現(xiàn)見第四章節(jié)運行調(diào)試及分析討論。(2)工作原理利用圖形界面編程實現(xiàn),利用到的知識點包括:窗體的創(chuàng)建和應用界面布局;事件處理,包括按鈕的動作事件處理,鼠標事件,窗體事件;接口知識:事件處理中通過接口約束事件監(jiān)聽者必須實現(xiàn)相應接口中定義的方法;流程控制語句:通過條件判斷區(qū)分不同事件源,作不同操作處理。棋子狀態(tài)控制:通過 arrMapShow 數(shù)組來判斷是下什么顏色的棋子,如果是計算機

10、下棋,則計算棋盤上某一放個八個方向上棋子的最大值,通過調(diào)用 readyplay()方法判斷某位置是否可下棋。3、 具體實現(xiàn)總共涉及五類,分別為:ChessFrame、ChessModel、ChessWindowEvent、FiveChessAppletDemo、MainPanel 3。引入的 java 包為:import java.awt.*;import java.awt.event.*; import java.applet.*; import javax.swing.*; import java.io.PrintStream; import javax.swing.JComponent;

11、 import javax.swing.JPanel;3.1 類設計類設計(1) 類名:FiveChessAppletDemo作用:顯示五子棋游戲窗體。類中含有的方法介紹: main()方法:程序運行的入口,創(chuàng)建了 ChessFrame 類的一個實例對象(cf),并啟動屏幕顯示顯示該實例對象。(2) 類名:ChessFrame作用:創(chuàng)建五子棋游戲主窗體和菜單。該類繼承 JFrame 類,實現(xiàn) ActionListener 接口。類中含有的方法介紹: ChessFrame()構造方法:構造五子棋游戲的主窗體; makeMenu()方法:構造五子棋游戲的主菜單; makeMenuItem()方法:

12、構造五子棋游戲的菜單項; makeRadioButtonMenuItem()方法:構造五子棋游戲的單選按鈕式菜單項; mapsize()方法:獲取棋盤大?。?restart()方法:重新開局; actionperformed()方法:異常的捕獲及不同模式、不同棋盤大小以及下拉菜單功能的實現(xiàn)。(3) 類名:ChessModel作用:實現(xiàn)了整個五子棋程序算法的核心。采用窮舉法判斷八個方向上存在棋子 4的最大值進行對弈。類中含有的主要方法介紹: ChessModel()構造方法:根據(jù)不同的棋盤模式(modeChess)來構建對應大小的棋盤; PanelInit()方法:按照棋盤模式構建棋盤大??; b

13、adxy()方法:判斷下子的橫向、縱向坐標是否越界; chessExist()方法:計算棋盤上某一方格上八個方向棋子的最大值,(這八個方向分別是:左、右、上、下、左上、左下、右上、右下); readyplay()方法:判斷該坐標位置是否可下棋子; play()方法:在該坐標位置下棋子; computerDo()方法:用窮舉法判斷每一個坐標點的八個方向的的最大棋子數(shù),最后得出棋子數(shù)最大值的坐標,下子; checkMax()方法:計算棋盤上某一方格上八個方向棋子的最大值; judgeSuccess()方法:判斷勝負; showSuccess()方法:贏棋后的提示; showDefeat()方法:輸

14、棋后的提示。(4) 類名:MainPanel作用:構建一個面板,在該面板上畫上棋盤;處理在該棋盤上的鼠標事件(如鼠標左鍵點擊、鼠標右鍵點擊、鼠標拖動等);該類繼承 JPanel 類,實現(xiàn) MouseListener、MouseMotionListener 接口。類中含有的主要方法介紹: ChessModel()方法:根據(jù)棋盤模式設定面板的大小; setModel()方法:根據(jù)棋盤模式設定棋盤的寬度和高度; paintComponent()方法:根據(jù)坐標計算出棋盤方格棋子的信息(如白子還是黑子),然后調(diào)用 draw 方法在棋盤上畫出相應的棋子; draw()方法:根據(jù)提供的棋子信息(顏色、坐標)

15、畫棋子; mousePressed ()方法:響應鼠標的點擊事件,根據(jù)鼠標的點擊來下棋,根據(jù)下棋判斷勝負、判斷是否人機對弈等; mouseMoved()方法:響應鼠標的拖動事件。 (5) 類名: ChessWindowEvent 5作用:響應退出窗口。該類繼承WindowAdapter。類中含有的方法介紹: windowClosing()方法:處理窗口關閉; ChessWindowEvent ()構造方法:提供無參構造方法。3.2 對弈策略對弈策略采用 readyplay()方法判斷該位置是否可以下棋,然后用窮舉法判斷每一個坐標點的八個方向,即左、右、上、下、左上、左下、右上、右下,棋子的最大

16、值,最后得出最大值的坐標,下子。最后采用 judgeCuccess()方法,判斷八個方向上是否滿五個同色棋子,若有,則成功,反之則失敗。4、運行調(diào)試與分析討論 圖圖 4-14-1 程序運行初始界面程序運行初始界面 圖圖 4-24-2 人機人機/ /人人對弈模式選擇界面人人對弈模式選擇界面 6 圖圖 4-34-3 人機對弈界面人機對弈界面 圖圖 4-44-4 兩種結果信息顯示界面兩種結果信息顯示界面 圖圖 4-54-5 棋盤選擇界面棋盤選擇界面 7 圖圖 4-64-6 視圖類型選擇界面視圖類型選擇界面 圖圖 4-74-7 程序版本信息選擇界面程序版本信息選擇界面 8 圖圖 4-84-8 程序版本

17、信息介紹界面程序版本信息介紹界面5、設計體會與小結本次實驗我們做的是人機對弈五子棋,這是上課時曾經(jīng)了解過的相關內(nèi)容,但不可否認的是,理解起來確實存在一定的困難。課程設計是將所有學過的甚至沒有學過的知識集合起來,并且運用到實際的運用當中,使得整個過程進行的難度較大,最后敲定的代碼也很長,較為復雜,以致于在調(diào)試過程中,出現(xiàn)了很多問題,代碼不斷出錯,運行之后的界面功能不全,計算機下棋的算法太過簡單,甚至一度出現(xiàn)無從下手,不知從何修改的困境但所有的一切都不能成為實現(xiàn)道路上的障礙,所以后來我們通過不停的討論、翻書,上網(wǎng)參考別人的代碼,不斷優(yōu)化,最后問題都被一一解決。由于此次時間倉促,依舊存在很多不足,比

18、如很多功能并不能全部實現(xiàn),對弈的策略比較簡單等。此次課程設計,我們深刻的了解到對知識運用熟練的重要性和團隊團結協(xié)作的重要性,它們是做好一個項目的基石。通過努力和團結協(xié)作完成的完整代碼帶給我們的成就感是不可比擬的,希望下次我們能做的更好。小組成員:胡子凌、范整整、吳越男、吳嘉懿6、參考文獻1 丁振凡,JAVA 語言程序設計,清華大學出版社.2 丁振凡,JAVA 語言程序設計實驗指導與習題解答,清華大學出版社.3 Charles Petzold. Windows 程序設計. 北京大學出版社,2002. 4 陳明,Java 語言程序設計,清華大學出版社. 9附錄:(源程序)package keshe

19、;import java.awt.*;import java.awt.event.*; import java.applet.*; import javax.swing.*; import java.io.PrintStream; import javax.swing.JComponent; import javax.swing.JPanel;/* *main 方法創(chuàng)建了 ChessFrame 類的一個實例對象(cf), *并啟動屏幕顯示顯示該實例對象。 */ public class FiveChessAppletDemo public static void main(String arg

20、s) ChessFrame cf= new ChessFrame(); cf.show(); /* *類 ChessFrame 主要功能是創(chuàng)建五子棋游戲主窗體和菜單 */ class ChessFrame extends JFrame implements ActionListener private String strsize=20 x15,30 x20,40 x30; private String strmode=人機對弈,人人對弈; public static boolean iscomputer=true,checkcomputer=true; private int width,h

21、eight; 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); this.setResizable(false); this.addWindowListener(new ChessWindowEvent(); MapSize(20,15); JMen

22、uBar mbar=new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu=new JMenu(游戲);mbar.add(makeMenu(gameMenu,new Object 開局, 棋盤,模式,null,退出 ,this); JMenu lookMenu=new JMenu(視圖); mbar.add(makeMenu(lookMenu,new Object Metal,Motif,Windows ,this); JMenu helpMenu=new JMenu(幫助); 10mbar.add(makeMenu(helpMenu,ne

23、w Object 關于 ,this);/構造五子棋游戲的主菜單 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;iitems.length;i+) if(itemsi= null) m.addSeparator();

24、else if(itemsi = 棋盤) JMenu jm=new JMenu(棋盤); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for(int j=0;jstrsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if(j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(itemsi= 模式) JMenu jm=new

25、JMenu(模式); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for(int h=0;hstrmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0)rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(makeMenuItem(itemsi,target);return m;/構造五子棋游戲的菜單項 public

26、JMenuItem makeMenuItem(Object item,Object target) JMenuItem r= null; if(item instanceof String) r=new JMenuItem(String)item); 11else if(item instanceof JMenuItem) r=(JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target);return r; /構造五子棋游戲的單

27、選按鈕式菜單項 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; else return null; if(target instanceof

28、ActionListener) r.addActionListener(ActionListener)target); return r; public void MapSize(int w,int h) setSize(w*20+50,h*20+100); if(this.checkcomputer) this.iscomputer=true; elsethis.iscomputer=false; mp.setModel(cm); mp.repaint(); public boolean getiscomputer() return this.iscomputer; public void

29、restart() int modeChess=cm.getModeChess(); if(modeChess= 1) cm=new ChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight(); else System.out.println(u81EAu5B9Au4E49); public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try 12if(arg.equals(Windows) UIManager.setLookAndFeel(

30、 com.sun.java.swing.plaf.windows.WindowsLookAndFeel); else if(arg.equals(Motif) UIManager.setLookAndFeel( com.sun.java.swing.plaf.motif.MotifLookAndFeel); else UIManager.setLookAndFeel( javax.swing.plaf.metal.MetalLookAndFeel); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.e

31、quals(20 x15) this.width=20; this.height=15; cm=new ChessModel(1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(30 x20) this.width=30; this.height=20; cm=new ChessModel(2);MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(ar

32、g.equals(40 x30) this.width=40; this.height=30; cm=new ChessModel(3); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(人機對弈) this.checkcomputer=true;this.iscomputer=true; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtiliti

33、es.updateComponentTreeUI(this); if(arg.equals(人人對弈) this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(開局) restart(); 13if(arg.equals(關于) JOptionPane.showMessageDialog(t

34、his, 制作者:天天都不知道吃什么小組, 關于,0); if(arg.equals(退出) System.exit(0); /* *類 ChessModel 實現(xiàn)了整個五子棋程序算法的核心 */ class ChessModel /棋盤的寬度、高度、棋盤的模式(如 2015) private int width,height,modeChess; /棋盤方格的橫向、縱向坐標 private int x=0,y=0; /棋盤方格的橫向、縱向坐標所對應的棋子顏色,/數(shù)組 arrMapShow 只有 4 個值:1,2,3,-5,/其中 1 代表該棋盤方格上下的棋子為黑子, /2 代表該棋盤方格上下

35、的棋子為白子, /3 代表為該棋盤方格上沒有棋子, /-5 代表該棋盤方格不能夠下棋子private intarrMapShow; /交換棋手的標識,棋盤方格上是否有棋子的標識符 private boolean isOdd,isExist;public ChessModel() /該構造方法根據(jù)不同的棋盤模式(modeChess)來構建對應大小的棋盤 public ChessModel(int modeChess) this.isOdd=true; if(modeChess= 1) PanelInit(20,15,modeChess); if(modeChess= 2) PanelInit(3

36、0,20,modeChess); if(modeChess= 3) PanelInit(40,30,modeChess); /按照棋盤模式構建棋盤大小 private void 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 = width+20| x= height+2

37、0| y0; /計算棋盤上某一方格上八個方向棋子的最大值, /這八個方向分別是:左、右、上、下、左上、左下、右上、右下 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) return; this.arrMapShowxy=3; /在該坐標位置下棋子

38、 public void play(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) this.isExist=true; return; else 15this.isExist=false; if(getisOdd() setisOdd(false); this.arrMapShowxy=1; else setisOdd(true); this.arrMapShowxy=2; /計算機走棋 /* *說明:用窮舉法判斷每一個坐標點的四個方向的的最大棋子數(shù), 最后得出棋子數(shù)最大值的坐標,下子 */ public void computer

39、Do(int width,int height) int max_black,max_white,max_temp,max=0; setisOdd(true); System.out.println(計算機走棋 .); for(int i= 0;i=width; i+) for(int j=0;j max) max=max_temp; this.x=i; this.y=j; setX(this.x); setY(this.y); this.arrMapShowthis.xthis.y=2;/記錄電腦下子后的橫向坐標public void setX(int x) this.x=x; /記錄電腦下

40、子后的縱向坐標 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,y_temp=y; int x_temp

41、1=x_temp,y_temp1=y_temp; /judge right 16for(int i=1;ithis.width) break;if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge left x_temp1=x_temp; for(int i=1;i5;i+) x_temp1-=1; if(x_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(num5) max_tem

42、p=num;/judge up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+) y_temp1-=1; if(y_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge down y_temp1=y_temp; for(int i=1;ithis.height) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break;

43、 17if(nummax_temp&num5)max_temp=num;/judge left_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+) x_temp1-=1; y_temp1-=1; if(y_temp10|x_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge right_down x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithis

44、.height | x_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(nummax_temp&num5) max_temp=num;/judge right_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+)x_temp1+=1; y_temp1-=1; if(y_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=

45、black_or_white) num+; elsebreak; /judge left_down x_temp1=x_temp; y_temp1=y_temp; 18for(int i=1;ithis.height | x_temp1max_temp&num5) 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(isod

46、d) arrvalue=2; else arrvalue=1; int x_temp1=x_temp,y_temp1=y_temp; /判斷右邊 for(int i=1;ithis.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判斷左邊 x_temp1=x_temp; for(int i=1;i6;i+)x_temp1-=1; if(x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; i

47、f(num=5) return true; 19/判斷上方x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i6;i+) y_temp1-=1; if(y_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判斷下方 y_temp1=y_temp; for(int i=1;ithis.height) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(n

48、um=5) return true;/判斷左上 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i6;i+) x_temp1-=1;y_temp1-=1; if(y_temp10|x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判斷右下 x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithis.height | x_temp1this.width) break; if(this.arrMap

49、Showx_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;i6;i+) x_temp1+=1; y_temp1-=1; if(y_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判斷左下x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithi

50、s.height | x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(num=5) return true; return false;/贏棋后的提示 public void showSuccess(JPanel jp) JOptionPane.showMessageDialog(jp,你贏了,好厲害!,win, JOptionPane.INFORMATION_MESSAGE); /輸棋后的提示 public void showDefeat(JPanel jp) JOptionPa

51、ne.showMessageDialog(jp,你輸了,請重新開始!,lost, 21JOptionPane.INFORMATION_MESSAGE); /* *類 MainPanel 主要完成如下功能: * 1、構建一個面板,在該面板上畫上棋盤; * 2、處理在該棋盤上的鼠標事件(如鼠標左鍵點擊、鼠標右鍵點擊、鼠標拖動等) */ class MainPanel extends JPanel implements MouseListener,MouseMotionListener private int width,height;/棋盤的寬度和高度 private ChessModel cm;/根據(jù)棋盤模式設定面板的大小 MainPanel(ChessModel mm) cm=mm; width=cm.getWidth(); height=cm.getHeight(); addMouseListener(this); /根據(jù)棋盤模式設定棋盤的寬度和高度public void setModel(ChessModel mm) cm=mm; width=cm.getWidth(); height =cm.getHeight(); /根據(jù)坐標計算出棋盤方格棋子的信息(如白子還

溫馨提示

  • 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

提交評論