中國(guó)象棋棋譜設(shè)計(jì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告分析_第1頁(yè)
中國(guó)象棋棋譜設(shè)計(jì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告分析_第2頁(yè)
中國(guó)象棋棋譜設(shè)計(jì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告分析_第3頁(yè)
中國(guó)象棋棋譜設(shè)計(jì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告分析_第4頁(yè)
中國(guó)象棋棋譜設(shè)計(jì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告分析_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)報(bào)告課程名稱(chēng): Java程序設(shè)計(jì) 設(shè)計(jì)題目: 中國(guó)象棋棋譜設(shè)計(jì) 專(zhuān) 業(yè) : 信息與計(jì)算科學(xué) 班 級(jí) : 信111 姓 名 : 侯曉曉 學(xué) 號(hào) : 指導(dǎo)教師: 鄧全才 河北建筑工程學(xué)院數(shù)理系2014 年 5 月 5 日課程設(shè)計(jì)題目(問(wèn)題)描述Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今世界最流行的開(kāi)發(fā)方法,它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承,很好的融合了“面向?qū)ο蟆?、“跨平臺(tái)”和“編程簡(jiǎn)潔”等特性。隨著Java語(yǔ)言的不斷發(fā)展,它的應(yīng)用前景將更為寬闊。本課程設(shè)計(jì)主要是使用Swing這個(gè)J

2、ava自帶的圖形開(kāi)發(fā)工具實(shí)現(xiàn)中國(guó)象棋棋子及棋盤(pán)的繪制,并根據(jù)相應(yīng)的象棋規(guī)則,可以設(shè)計(jì)棋譜,完成棋譜的保存和對(duì)已保存的棋譜的演示,方便現(xiàn)在愛(ài)棋人士對(duì)殘局的收藏于研究,而且達(dá)到了進(jìn)一步鞏固課堂上所學(xué)到的知識(shí),深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦?,熟練的?yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問(wèn)題的能力的目的。本 組 成 員 情 況姓 名學(xué)號(hào)承 擔(dān) 的 任 務(wù)成 績(jī)侯曉曉棋盤(pán)界面設(shè)計(jì),對(duì)弈規(guī)則的實(shí)現(xiàn),保存下棋的步驟從而實(shí)現(xiàn)悔棋的實(shí)現(xiàn),設(shè)計(jì)棋譜,完成保存棋譜教 師 評(píng) 語(yǔ) 簽名: 一、本 組 設(shè) 計(jì) 的 功 能 描 述一、 基本界面設(shè)計(jì):1.棋子的設(shè)計(jì);(1)聲明一個(gè)ChessPiece類(lèi),完

3、成各個(gè)棋子的外觀設(shè)計(jì);public class ChessPiece extends JLabel String name; Color backColor=null,foreColor; String 顏色類(lèi)別=null; ChessBoard board=null; int width,height; public ChessPiece(String name,Color fc,Color bc,int width,int height,ChessBoard board) =name; this.board=board; this.width=width; this.he

4、ight=height; foreColor=fc; backColor=bc; setSize(width,height); setBackground(bc); addMouseMotionListener(board); addMouseListener(board); public void paint(Graphics g) g.setColor(foreColor); g.fillOval(2,2,width-2,height-2); g.setColor(Color.white); g.setFont(new Font("隸書(shū)",Font.BOLD,28);

5、g.drawString(name,7,height-8); g.setColor(Color.yellow); g.drawOval(2,2,width-2,height-2); public int getWidth()return width; public int getHeight()return height; public String getName()return name; public Color 獲取棋子顏色() return foreColor; public void set棋子類(lèi)別(String 類(lèi)別)顏色類(lèi)別=類(lèi)別; public String 棋子類(lèi)別()re

6、turn 顏色類(lèi)別;(2)實(shí)現(xiàn)各個(gè)棋子外觀;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChessBoard extends JPanel implements MouseListener,MouseMotionListenerpublic ChessPoint point; public int unitWidth,unitHeight; int x軸長(zhǎng),y軸長(zhǎng); int x,y; boolean move=false; public String 紅方顏色="紅色"

7、;,黑方顏色="黑色"ChessPiece 紅車(chē)1,紅車(chē)2,紅馬1,紅馬2,紅相1,紅相2,紅帥,紅士1,紅士2,紅兵1,紅兵2,紅兵3,紅兵4,紅兵5,紅炮1,紅炮2;ChessPiece 黑車(chē)1,黑車(chē)2,黑馬1,黑馬2,黑將,黑士1,黑士2,黑卒1,黑卒2,黑卒3,黑卒4,黑卒5,黑象1,黑象2,黑炮1,黑炮2; int startX,startY; int startI,startJ; public boolean 紅方走棋=true,黑方走棋=false; Rule rule=null; public MakeChessManual record=null; pub

8、lic ChessBoard(int w,int h,int r,int c) setLayout(null); addMouseListener(this); addMouseMotionListener(this); Color bc=getBackground(); unitWidth=w; unitHeight=h; x軸長(zhǎng)=r; y軸長(zhǎng)=c; point=new ChessPointr+1c+1; for(int i=1;i<=r;i+) for(int j=1;j<=c;j+)pointij=new ChessPoint(i*unitWidth,j*unitHeight

9、,false); rule=new Rule(this,point); record=new MakeChessManual(this,point) ; 紅車(chē)1=new ChessPiece("車(chē)",Color.red,bc,w-4,h-4,this); 紅車(chē)1.set棋子類(lèi)別(紅方顏色); /分別是紅方各個(gè)棋子的設(shè)計(jì) 紅兵5=new ChessPiece("兵",Color.red,bc,w-4,h-4,this); 紅兵5.set棋子類(lèi)別(紅方顏色); 黑將=new ChessPiece("將",Color.blue,bc,w-4

10、,h-4,this); 黑將.set棋子類(lèi)別(黑方顏色); /分別是黑方各個(gè)棋子的設(shè)計(jì) 黑卒5=new ChessPiece("卒",Color.blue,bc,w-4,h-4,this); 黑卒5.set棋子類(lèi)別(黑方顏色); point110.setPiece(紅車(chē)1,this); /紅方的每個(gè)棋子放到與生活中棋盤(pán)位置一樣 point97.setPiece(紅兵5,this); point11.setPiece(黑車(chē)1,this); /黑方的每個(gè)棋子放到與生活中棋盤(pán)位置一樣 point94.setPiece(黑卒5,this); (3)棋盤(pán)的設(shè)計(jì): public voi

11、d paintComponent(Graphics g) super.paintComponent(g); for(int j=1;j<=y軸長(zhǎng);j+) g.drawLine(point1j.x,point1j.y,pointx軸長(zhǎng)j.x,pointx軸長(zhǎng)j.y); for(int i=1;i<=x軸長(zhǎng);i+) if(i!=1&&i!=x軸長(zhǎng)) g.drawLine(pointi1.x,pointi1.y,pointiy軸長(zhǎng)-5.x,pointiy軸長(zhǎng)-5.y); g.drawLine(pointiy軸長(zhǎng)-4.x,pointiy軸長(zhǎng)-4.y,pointiy軸長(zhǎng).x,

12、pointiy軸長(zhǎng).y); else g.drawLine(pointi1.x,pointi1.y,pointiy軸長(zhǎng).x,pointiy軸長(zhǎng).y); g.drawLine(point41.x,point41.y,point63.x,point63.y);g.drawLine(point61.x,point61.y,point43.x,point43.y); g.drawLine(point48.x,point48.y,point6y軸長(zhǎng).x,point6y軸長(zhǎng).y);g.drawLine(point4y軸長(zhǎng).x,point4y軸長(zhǎng).y,point68.x,point68.y); for(in

13、t i=1;i<=x軸長(zhǎng);i+) g.drawString(""+i,i*unitWidth,unitHeight/2);int j=1; for(char c='A'c<='J'c+) g.drawString(""+c,unitWidth/4,j*unitHeight);j+; (4)實(shí)現(xiàn)棋子按照生活中的對(duì)弈規(guī)則走棋的程序如下:public boolean movePieceRule(ChessPiece piece,int startI,int startJ,int endI,int endJ) this

14、.piece=piece;this.startI=startI;this.startJ=startJ; this.endI=endI; this.endJ=endJ; int minI=Math.min(startI,endI); int maxI=Math.max(startI,endI); int minJ=Math.min(startJ,endJ); int maxJ=Math.max(startJ,endJ);boolean 可否走棋=false;if(piece.getName().equals("車(chē)")if(startI=endI) int j=0;for(j=

15、minJ+1;j<=maxJ-1;j+) if(pointstartIj.isPiece()可否走棋=false;break; if(j=maxJ)可否走棋=true;else if(startJ=endJ) int i=0;for(i=minI+1;i<=maxI-1;i+) if(pointistartJ.isPiece()可否走棋=false;break; if(i=maxI)可否走棋=true;else可否走棋=false;else if(piece.getName().equals("馬")./以及各個(gè)棋子規(guī)則的設(shè)計(jì)(5)實(shí)現(xiàn)棋子按對(duì)弈規(guī)則的移動(dòng)并記錄

16、棋子移動(dòng)的位置;界面如下: 代碼如下 public void mousePressed(MouseEvent e) ChessPiece piece=null;Rectangle rect=null; if(e.getSource()=this)move=false; if(move=false) if(e.getSource() instanceof ChessPiece) piece=(ChessPiece)e.getSource(); startX=piece.getBounds().x; startY=piece.getBounds().y; rect=piece.getBounds(

17、); for(int i=1;i<=x軸長(zhǎng);i+) for(int j=1;j<=y軸長(zhǎng);j+) int x=pointij.getX(); int y=pointij.getY(); if(rect.contains(x,y) startI=i;startJ=j;break; public void mouseMoved(MouseEvent e) public void mouseDragged(MouseEvent e) ChessPiece piece=null; if(e.getSource() instanceof ChessPiece) piece=(ChessPie

18、ce)e.getSource(); move=true; e=SwingUtilities.convertMouseEvent(piece,e,this); if(e.getSource()=this)if(move&&piece!=null) x=e.getX(); y=e.getY(); if(紅方走棋&&(piece.棋子類(lèi)別().equals(紅方顏色)piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2); if(黑方走棋&&(piece.棋子類(lèi)別().equals(黑

19、方顏色) piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2); public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) 2.圖中中國(guó)象棋是個(gè)菜單包括制作棋譜、保存棋譜、演示棋譜三個(gè)菜單項(xiàng)(1)保存棋譜設(shè)計(jì)界面為:當(dāng)你制作棋譜文件時(shí)可以選擇路徑保存棋譜文件(2)演示棋譜設(shè)計(jì)

20、界面為:A可以從文件中選擇你要演示的棋譜文件B選擇文件后開(kāi)始演示棋譜文件自動(dòng)演示中可以按照你設(shè)計(jì)棋譜時(shí)的步驟一次生成保存的棋譜文件,也可以設(shè)置時(shí)間間隔,使得生成文件時(shí)一步和下一步的時(shí)間安裝你設(shè)置的時(shí)間進(jìn)行,也可以收手動(dòng)操作,一步一步的進(jìn)行。并在旁邊記錄棋子移動(dòng)位置的記錄設(shè)計(jì)actionPerformed事件的代碼為:public void actionPerformed(ActionEvent e) if(e.getSource()=制作棋譜) con.removeAll();保存棋譜.setEnabled(true); this.setTitle(制作棋譜.getText(); board=

21、new ChessBoard(45,45,9,10); record=board.record; JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,board,record); split.setDividerSize(5); split.setDividerLocation(460); con.add(split,BorderLayout.CENTER); validate(); if(e.getSource()=保存棋譜) int state=fileChooser.showSaveDialog(null);

22、File saveFile =fileChooser.getSelectedFile();if(saveFile!=null&&state=JFileChooser.APPROVE_OPTION) tryFileOutputStream outOne=newFileOutputStream(saveFile); ObjectOutputStream outTwo=new ObjectOutputStream(outOne); outTwo.writeObject(record.獲取棋譜() ; outOne.close(); outTwo.close(); catch(IOEx

23、ception event) if(e.getSource()=演示棋譜) con.removeAll();con.repaint();con.validate(); validate(); 保存棋譜.setEnabled(false); int state=fileChooser.showOpenDialog(null); File openFile =fileChooser.getSelectedFile(); if(openFile!=null&&state=JFileChooser.APPROVE_OPTION) tryFileInputStream inOne=new

24、 FileInputStream(openFile); ObjectInputStream inTwo=new ObjectInputStream(inOne); 棋譜=(LinkedList)inTwo.readObject() ; inOne.close();inTwo.close();ChessBoard board=new ChessBoard(45,45,9,10);demon=new Demon(board); demon.set棋譜(棋譜);con.add(demon,BorderLayout.CENTER);con.validate(); validate();this.set

25、Title(演示棋譜.getText()+":"+openFile); catch(Exception event)JLabel label=new JLabel("不是棋譜文件"); label.setFont(new Font("隸書(shū)",Font.BOLD,60);label.setForeground(Color.red); label.setHorizontalAlignment(SwingConstants.CENTER);con.add(label,BorderLayout.CENTER);con.validate(); this.setTitle("沒(méi)有打開(kāi)棋譜"); validate(); elseJLabel label=new JLabel("沒(méi)有打開(kāi)棋譜文件呢"); label.setFont(new Font("隸書(shū)",Font.BOLD,50); label.setForeground(Color.pink); label.s

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論