国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java棋類游戲實踐之中國象棋

2019-11-26 14:34:40
字體:
來源:轉載
供稿:網友

本文實例講述了java實現的中國象棋游戲代碼,分享給大家供大家參考,具體代碼如下

一、實踐目的:

1.鼠標點擊、拖動等事件的應用與區別

2.棋譜文件的保存與讀取

3.完善象棋的規則。

二、實踐內容:

中國象棋歷史悠久,吸引了無數的人研究,現對中國象棋的對戰和實現棋譜的制作做如下的設計和說明,供大家參考學習。

1、機機對弈,紅方先手。在符合規則的情況下拖動棋子到目的地,松鼠標落子。


人人對弈圖

2、制作棋譜,選擇制作棋譜菜單后,對弈開始,并記錄了下棋過程。


選擇“制作棋譜”菜單



棋譜制作完畢紅方勝出

一方勝出后彈出勝利消息對話框。點擊確定后,選擇“保存棋譜”菜單,彈出保存文件對話框。


保存棋譜對話框

3.演示棋譜,選擇演示棋譜菜單后,彈出打開對話框,選擇保存好的棋譜,開始演示。


演示棋譜對話框


演示棋譜過程(自動和手動兩種)

三、參考代碼:

1.象棋主類 文件ChineseChess.java

package cn.edu.ouc.chineseChess;  import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.LinkedList;  /**  * 象棋主類  *  * @author cnlht  */ public class ChineseChess extends JFrame implements ActionListener {  ChessBoard board = null;  Demon demon = null;  MakeChessManual record = null;  Container con = null;  JMenuBar bar;  JMenu fileMenu;  JMenuItem 制作棋譜, 保存棋譜, 演示棋譜;  JFileChooser fileChooser = null;  LinkedList 棋譜 = null;   public ChineseChess() {   bar = new JMenuBar();   fileMenu = new JMenu("中國象棋");   制作棋譜 = new JMenuItem("制作棋譜");   保存棋譜 = new JMenuItem("保存棋譜");   保存棋譜.setEnabled(false);   演示棋譜 = new JMenuItem("演示棋譜");   fileMenu.add(制作棋譜);   fileMenu.add(保存棋譜);   fileMenu.add(演示棋譜);   bar.add(fileMenu);   setJMenuBar(bar);   setTitle(制作棋譜.getText());   制作棋譜.addActionListener(this);   保存棋譜.addActionListener(this);   演示棋譜.addActionListener(this);   board = new ChessBoard(45, 45, 9, 10);   record = board.record;   con = getContentPane();   JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true,     board, record);   split.setDividerSize(5);   split.setDividerLocation(460);   con.add(split, BorderLayout.CENTER);   addWindowListener(new WindowAdapter() {    public void windowClosing(WindowEvent e) {     System.exit(0);    }   });   setVisible(true);   setBounds(60, 20, 690, 540);   fileChooser = new JFileChooser();   con.validate();   validate();  }   public void actionPerformed(ActionEvent e) {   if (e.getSource() == 制作棋譜) {    con.removeAll();    保存棋譜.setEnabled(true);    this.setTitle(制作棋譜.getText());    board = 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);    File saveFile = fileChooser.getSelectedFile();    if (saveFile != null && state == JFileChooser.APPROVE_OPTION) {     try {      FileOutputStream outOne = new FileOutputStream(saveFile);      ObjectOutputStream outTwo = new ObjectOutputStream(outOne);      outTwo.writeObject(record.獲取棋譜());      outOne.close();      outTwo.close();     } catch (IOException 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) {     try {      FileInputStream inOne = new 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.setTitle(演示棋譜.getText() + ":" + openFile);     } catch (Exception event) {      JLabel label = new JLabel("不是棋譜文件");      label.setFont(new Font("隸書", Font.BOLD, 60));      label.setForeground(Color.red);      label.setHorizontalAlignment(SwingConstants.CENTER);      con.add(label, BorderLayout.CENTER);      con.validate();      this.setTitle("沒有打開棋譜");      validate();     }    } else {     JLabel label = new JLabel("沒有打開棋譜文件呢");     label.setFont(new Font("隸書", Font.BOLD, 50));     label.setForeground(Color.pink);     label.setHorizontalAlignment(SwingConstants.CENTER);     con.add(label, BorderLayout.CENTER);     con.validate();     this.setTitle("沒有打開棋譜文件呢");     validate();    }   }  }   public static void main(String args[]) {   new ChineseChess();  } } 

2.象棋棋盤類文件ChessBoard.java

package cn.edu.ouc.chineseChess;  import javax.swing.*; import java.awt.*; import java.awt.event.*;  /**  * 棋盤類  *  * @author cnlht  */ public class ChessBoard extends JPanel implements MouseListener,   MouseMotionListener {  public ChessPoint point[][];  public int unitWidth, unitHeight;  private int x軸長, y軸長;  private int x, y;  private Image img;  protected Image pieceImg;  private boolean move = false;  public String 紅方顏色 = "紅方", 黑方顏色 = "黑方";  ChessPiece 紅車1, 紅車2, 紅馬1, 紅馬2, 紅相1, 紅相2, 紅帥, 紅士1, 紅士2, 紅兵1, 紅兵2, 紅兵3, 紅兵4,    紅兵5, 紅炮1, 紅炮2;  ChessPiece 黑車1, 黑車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;   public ChessBoard(int w, int h, int r, int c) {   setLayout(null);   addMouseListener(this);   addMouseMotionListener(this);   Color bc = getBackground();   unitWidth = w;   unitHeight = h;   x軸長 = r;   y軸長 = c;    point = new ChessPoint[r + 1][c + 1];    for (int i = 1; i <= r; i++) {    for (int j = 1; j <= c; j++) {     point[i][j] = new ChessPoint(i * unitWidth, j * unitHeight,       false);    }   }    rule = new Rule(this, point);   record = new MakeChessManual(this, point);    img = Toolkit.getDefaultToolkit().getImage("board.jpg");   pieceImg = Toolkit.getDefaultToolkit().getImage("piece.gif");      紅車1 = new ChessPiece("

主站蜘蛛池模板:
绥阳县|
金坛市|
安西县|
青神县|
临漳县|
日土县|
石渠县|
青铜峡市|
林芝县|
杭锦旗|
广安市|
方城县|
大化|
昭觉县|
古丈县|
海伦市|
含山县|
澎湖县|
黄平县|
鹿邑县|
岳西县|
阿尔山市|
双峰县|
上饶市|
蒙自县|
莱阳市|
昭觉县|
乌兰察布市|
民丰县|
临高县|
肥城市|
博罗县|
化隆|
双桥区|
耒阳市|
兰考县|
惠州市|
瑞安市|
富源县|
壤塘县|
奉节县|