java chess象棋游戏开发功能需求,【笔记】JAVA 中国象棋游戏 部分源码

这是一个实现中国象棋棋谱演示的Java程序,包括重新演示、下一步、自动演示和暂停功能。程序中定义了棋谱类,实现了ActionListener和Runnable接口,能够根据输入的时间间隔动态演示棋谱步骤,并在界面上显示。当棋谱演示完毕后,会显示相应的结束信息。
摘要由CSDN通过智能技术生成

/**

* 演示棋谱类

*

* @author cnlht

*/

public class Demon extends JPanel implements ActionListener, Runnable {

public JButton replay = null, next = null, auto = null, stop = null;

LinkedList 棋谱 = null;

Thread 自动演示 = null; 中国象棋:http://xiangqi.sz4j.com/forum-39-2.html

int index = -1;

ChessBoard board = null;

JTextArea text;

JTextField 时间间隔 = null;

int time = 1000;

String 演示过程 = "";

JSplitPane splitH = null, splitV = null;

public Demon(ChessBoard board) {

this.board = board;

replay = new JButton("重新演示");

next = new JButton("下一步");

auto = new JButton("自动演示");

stop = new JButton("暂停演示");

自动演示 = new Thread(this);

replay.addActionListener(this);

next.addActionListener(this);

auto.addActionListener(this);

stop.addActionListener(this);

text = new JTextArea();

时间间隔 = new JTextField("1");

setLayout(new BorderLayout());

JScrollPane pane = new JScrollPane(text);

JPanel p = new JPanel(new GridLayout(3, 2));

p.add(next);

p.add(replay);

p.add(auto);

p.add(stop);

p.add(new JLabel("时间间隔(秒)", SwingConstants.CENTER));

p.add(时间间隔); 象棋游戏:http://xiangqi.sz4j.com/forum-39-3.html

splitV = new JSplitPane(JSplitPane.VERTICAL_SPLIT, pane, p);

splitH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, board, splitV);

splitV.setDividerSize(5);

splitV.setDividerLocation(400);

splitH.setDividerSize(5);

splitH.setDividerLocation(460);

add(splitH, BorderLayout.CENTER);

validate();

}

public void set棋谱(LinkedList 棋谱) {

this.棋谱 = 棋谱;

}

public char numberToLetter(int n) {

char c = '\0';

switch (n) {

case 1:

c = 'A';

break;

case 2:

c = 'B';

break;

case 3:

c = 'C';

break;

case 4:

c = 'D';

break;

case 5:

c = 'E';

break;

case 6:

c = 'F';

break;

case 7:

c = 'G';

break;

case 8:

c = 'H';

break;

case 9:

c = 'I';

break;

case 10:

c = 'J';

break;

}

return c;

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == next) {

index++;

if (index < 棋谱.size()) {

演示一步(index);

} else {

演示结束("棋谱演示完毕");

}

}

if (e.getSource() == replay) {

board = new ChessBoard(45, 45, 9, 10);

splitH.remove(board);

splitH.setDividerSize(5);

splitH.setDividerLocation(460);

splitH.setLeftComponent(board);

splitH.validate();

index = -1;

text.setText(null);

}

if (e.getSource() == auto) {

next.setEnabled(false);

replay.setEnabled(false);

try {

time = 1000 * Integer.parseInt(时间间隔.getText().trim());

} catch (NumberFormatException ee) {

time = 1000;

}

if (!(自动演示.isAlive())) {

自动演示 = new Thread(this);

board = new ChessBoard(45, 45, 9, 10);

splitH.remove(board);

splitH.setDividerSize(5);

splitH.setDividerLocation(460);

splitH.setLeftComponent(board);

splitH.validate();

text.setText(null);

自动演示.start();

}

}

if (e.getSource() == stop) {

if (e.getActionCommand().equals("暂停演示")) {

演示过程 = "暂停演示";

stop.setText("继续演示");

stop.repaint();

}

if (e.getActionCommand().equals("继续演示")) {

演示过程 = "继续演示";

自动演示.interrupt();

stop.setText("暂停演示");

stop.repaint();

}

}

}

public synchronized void run() {

for (index = 0; index < 棋谱.size(); index++) {

try {

Thread.sleep(time);

} catch (InterruptedException e) {

}

while (演示过程.equals("暂停演示")) {

try {

wait();

} catch (InterruptedException e) {

notifyAll();

}

}

演示一步(index);

}

if (index >= 棋谱.size()) {

演示结束("棋谱演示完毕");

next.setEnabled(true);

replay.setEnabled(true);

}

}

public void 演示一步(int index) {

MoveStep step = (MoveStep) 棋谱.get(index);

Point pStart = step.pStart;

Point pEnd = step.pEnd;

int startI = pStart.x;

int startJ = pStart.y;

int endI = pEnd.x;

int endJ = pEnd.y;

ChessPiece piece = (board.point)[startI][startJ].getPiece();

if ((board.point)[endI][endJ].isPiece() == true) {

ChessPiece pieceRemoved = (board.point)[endI][endJ].getPiece();

(board.point)[endI][endJ].reMovePiece(pieceRemoved, board);

board.repaint();

(board.point)[endI][endJ].setPiece(piece, board);

(board.point)[startI][startJ].set有棋子(false);

board.repaint();

} else {

(board.point)[endI][endJ].setPiece(piece, board);

(board.point)[startI][startJ].set有棋子(false);

}

String 棋子类别 = piece.棋子类别();

String name = piece.getName();

String m = "#" + 棋子类别 + name + ": " + startI + numberToLetter(startJ)

+ " 到 " + endI + numberToLetter(endJ);

text.append(m);

if (piece.棋子类别().equals(board.黑方颜色))

text.append("\n");

}

public void 演示结束(String message) {   splitH.remove(board);   splitH.setDividerSize(5);   splitH.setDividerLocation(460);   JLabel label = new JLabel(message);   label.setFont(new Font("隶书", Font.BOLD, 40));   label.setForeground(Color.blue);   label.setHorizontalAlignment(SwingConstants.CENTER);   splitH.setLeftComponent(label);   splitH.validate();  } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值