📄 makechessmanual.java
字号:
package xq;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.LinkedList;
public class MakeChessManual extends JPanel implements ActionListener {
JTextArea text = null;
JScrollPane scroll = null;
ChessBoard board = null;
ChessPoint point[][];
LinkedList 棋谱 = null;
LinkedList 吃掉的棋子 = null;
JButton buttonUndo;
int i = 0;
public MakeChessManual(ChessBoard board, ChessPoint[][] point){
this.board = board;
this.point = point;
text = new JTextArea();
scroll = new JScrollPane(text);
text.setEditable(false);
text.setLineWrap(true);
棋谱 = new LinkedList();
吃掉的棋子 = new LinkedList();
buttonUndo = new JButton("悔棋");
buttonUndo.setFont(new Font("隶书",Font.PLAIN,18));
setLayout(new BorderLayout());
add(scroll,BorderLayout.CENTER);
add(buttonUndo,BorderLayout.SOUTH);
buttonUndo.addActionListener(this);
}
public char numberToLetter(int n){//将数字对应到字母的方法
char c = '\n';
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 记录棋谱(ChessPiece piece, int startI, int startJ, int endI, int endJ){
Point pStart = new Point(startI, startJ);
Point pEnd = new Point(endI, endJ);
MoveStep step = new MoveStep(pStart, pEnd);
棋谱.add(step);
//在文本区中显示相应的走棋步骤
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 记录吃掉的棋子(Object object){
吃掉的棋子.add(object);
}
public LinkedList 获取棋谱(){
return 棋谱;
}
public void actionPerformed(ActionEvent e){
int position = text.getText().lastIndexOf("#");
if(position != -1)//删除文本区的最后一条信息.
text.replaceRange(" ", position, text.getText().length());
if(棋谱.size() >0){
MoveStep lastStep = (MoveStep)棋谱.getLast();
棋谱.removeLast();
Object qizi = 吃掉的棋子.getLast();
吃掉的棋子.removeLast();
String temp = qizi.toString();
if(temp.equals("没吃棋子")){
//如果所悔的棋步没有吃棋子
int startI = lastStep.pStart.x;
int startJ = lastStep.pStart.y;
int endI = lastStep.pEnd.x;
int endJ = lastStep.pEnd.y;
ChessPiece piece = point[endI][endJ].getPiece();
//将棋子放回原处
point[startI][startJ].setPiece(piece, board);
(point[endI][endJ]).set有棋子(false);
if(piece.棋子类别().equals(board.红方颜色));
{
board.红方走棋 = true;
board.黑方走棋 = false;
}
if(piece.棋子类别().equals(board.黑方颜色)){
board.黑方走棋 = true;
board.红方走棋 = false;
}
}
else{
//如果所悔棋步吃了棋子
ChessPiece removedPiece = (ChessPiece)qizi;
int startI = lastStep.pStart.x;
int startJ = lastStep.pStart.y;
int endI = lastStep.pEnd.x;
int endJ = lastStep.pEnd.y;
ChessPiece piece = point[endI][endJ].getPiece();
point[startI][startJ].setPiece(piece, board);//将悔棋方的棋子放回起始棋点
point[endI][endJ].setPiece(removedPiece, board);//将被吃掉的棋子放回原处
(point[endI][endJ]).set有棋子(true);
if(piece.棋子类别().equals(board.红方颜色));
{
board.红方走棋 = true;
board.黑方走棋 = false;
}
if(piece.棋子类别().equals(board.黑方颜色)){
board.黑方走棋 = true;
board.红方走棋 = false;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -