⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makechessmanual.java

📁 JAVA版中国象棋
💻 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 + -