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

📄 chessmainframe.java

📁 一个网络对弈的中国象棋程序 操作: 1、Setting,选择对战方式。如果选择“网络对战”
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package org.acerge.main;import java.awt.*;import java.awt.event.*;import javax.swing.*;import org.acerge.engine.*;import org.acerge.message.*;import org.acerge.message.impl.ChessMessage;import org.acerge.message.impl.ChessMessageQueue;import org.acerge.message.impl.MessageConsumer;import org.acerge.message.impl.MessageProducer;import org.acerge.message.impl.PieceMessageDeliver;import org.acerge.message.support.MsgNetConnection;import org.acerge.message.support.OuterMsgReceiver;import org.acerge.message.support.OuterMsgSender;import org.acerge.pieces.*;import org.acerge.rule.*;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.io.*;public class ChessMainFrame extends JFrame {	private static Log log = LogFactory.getLog(ChessMainFrame.class);	private JLabel noteinfo;	private JButton button_setSysCfg, button_resetAll;	private JButton button_reverseBoard;	private JButton button_cmpMove;	private JButton button_turnBack;	private JButton button_saveFile;	private JButton button_openFile;	private JButton button_preStep, button_nextStep, button_endStep;	private JFileChooser fileChooserButton;	private JTextField textField_redTime, textField_blackTime;	private JButton button_getConnect;	private JButton button_setRule, button_displayRule;	private JButton button_start;	JPanel panel0, panel1, panel2, panel3, panel4;// select red or black	private Container content;	private PictureBoard pictureBoard;	private int player = 0;	private boolean boardReversed = false;	// private boolean boardChangedWhenComputerIsThingking = false;	private boolean computerIsThingking = false;	private final TimeRule timeRule = new TimeRule();	private TimeRuleConfig timeRuleConfig = new TimeRuleConfig();	private SysConfigInfo sysCfg = new SysConfigInfo();	private ReadyToPlay readyToPlay;	private boolean competitorStarted = false;	// computer.	private boolean started = false;	private boolean isFirstStep = true;// 第一步	private String competitorName;	private static final String SET_RULE_COMMAND = "set time rule";	private static final String DISPLAY_RULE_COMMAND = "display time rule";	private int boardGridSize;// 棋板格子的大小	private int view = 0;// 视角0:红方在下方	private int lineLoc;	private ActiveBoard activeBoard;	private PieceArray pieceArr = new PieceArray();;	private Qizi pieceIndex[] = new Qizi[90];;// [90]	private PieceArray capturedArr = new PieceArray();;	private Qizi lastSelected;	private SortedMoveNodes AllMoves;	private int[][] HisTable = new int[90][90];;	private Translation translation;	private SearchEngine searchEngine;	/***************************************************************************	 * message processer	 **************************************************************************/	private MessageQueue msgQueue = new ChessMessageQueue();	private Producer producer = new MessageProducer(msgQueue);	private Consumer consumer = new MessageConsumer();	private PieceMessageDeliver deliver = new PieceMessageDeliver(msgQueue);	private MessageListener localListener = new LocalMessageListener();	private MessageListener remoteListener = new RemoteMessageListener();	private MsgNetConnection netConnection = new MsgNetConnection();	private OuterMsgSender outSender = new OuterMsgSender(netConnection);	private OuterMsgReceiver outReceiver = new OuterMsgReceiver(producer,			netConnection);	/***************************************************************************	 * button Listeners	 **************************************************************************/	private LastNextTurnBackButtonListener lnt = new LastNextTurnBackButtonListener();	private OpenSaveButtonListener fhl = new OpenSaveButtonListener();	private ConnectActionListener connectListener = new ConnectActionListener();	private SysInfoButtonsListener sral = new SysInfoButtonsListener();	/***************************************************************************	 * Constructors	 **************************************************************************/	public ChessMainFrame() {		super();		initialize();		createGui();	}	public ChessMainFrame(int bs, int view, String appname) {		super(appname);		setBoardGridSize(bs);		setView(view);		initialize();		createGui();	}	private void initialize() {		JPanel jContentPane = new JPanel();		jContentPane.setLayout(null);		this.setContentPane(jContentPane);		// this.getContentPane().setLayout(null);		for (int k = 0; k < 90; k++)			for (int j = 0; j < 90; j++)				HisTable[k][j] = 0;		setBoardGridSize(50);		this.getActiveBoard();		this.getSearchEngine();		this.initActiveBoard();		this.getTranslation();		this.getPictureBoard();		this.addWindowListener(new WindowAdapter() {			public void windowClosing(WindowEvent e) {				System.exit(0);			}		});		timeRuleConfig = new TimeRuleConfig();		timeRule.setProducer(producer);		timeRule.setPlayerTimer(new TimeCounter());		sysCfg = new SysConfigInfo();		readyToPlay = new ReadyToPlay();		AllMoves = new SortedMoveNodes();		deliver.registerAConsumer(consumer);		consumer.RegisterAListener(localListener);		consumer.RegisterAListener(remoteListener);		outReceiver.setProducer(producer);		deliver.start();	}	public void createGui() {		JDialog.setDefaultLookAndFeelDecorated(true);		content = this.getContentPane();		// content.		// content.setLayout(null);		// this.setContentPane(newBoard);		// newBoard.		fileChooserButton = new JFileChooser();		fileChooserButton.setCurrentDirectory(new File("./save"));		this.setSize(new Dimension(getPictureBoard().getWidth() + 140,				getPictureBoard().getHeight() + 80));		this.setLocation(SCREEN.getLocationForCenter(getSize()));		getNoteinfo().setBounds(10, pictureBoard.getHeight() + 15,				pictureBoard.getWidth() - 20, 25);		getPanel0().setLocation(pictureBoard.getWidth() + 15, 5);		getPanel1().setLocation(pictureBoard.getWidth() + 15, 135);		getPanel2().setLocation(pictureBoard.getWidth() + 15, 203);		getPanel3().setLocation(pictureBoard.getWidth() + 15, 273);		getPanel4().setLocation(pictureBoard.getWidth() + 15, 400);		content.add(noteinfo);		content.add(getPanel0());		content.add(getPanel1());		content.add(getPanel2());		content.add(getPanel3());		content.add(getPanel4());		content.add(getPictureBoard());		initPictureBoardAndPieces();		displayAllQizi();	}// end of createGui	public void initActiveBoard() {		getActiveBoard()				.loadFen(						"rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1");		getTranslation()				.setFenStr(						"rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1");		loadBook("./data/book.txt");		player = 0;	}	public void initActiveBoard(String fenStr) {		getActiveBoard().loadFen(fenStr);		player = activeBoard.getPlayer();	}	/***************************************************************************	 * add all picture pieces to content	 **************************************************************************/	public void initPictureBoardAndPieces() {		initPieces();		for (int i = 0; i < pieceArr.size(); i++)			content.add(pieceArr.getPiece(i));		content.add(pictureBoard);	}	public void reloadPreActiveBoard(ActiveBoard newBoard) {		clearPicturePieces();		this.activeBoard = newBoard;		initPieces();		initPictureBoardAndPieces();		displayAllQizi();		player = getActiveBoard().getPlayer();	}	private void initPieces() {		// if (content==null) content = this.getContentPane();		PieceFactory.setPieceSize((int) (getBoardGridSize() * 0.9));		String s = activeBoard.getFenStr();		Qizi tmpQizi;		int row = 9;//		int col = 0;		for (int i = 0; i < 90; i++) {			pieceIndex[i] = null;		}		PieceMouseListener PML = new PieceMouseListener();		for (int i = 0; i < s.length() && row >= 0;) {			char tmpChar = s.charAt(i);			if (tmpChar >= '1' && tmpChar <= '9') {				i++;				col += tmpChar - '0';			}			if (s.charAt(i) == '/' || s.charAt(i) == ' ') {				row--;				col = 0;			} else {				tmpQizi = PieceFactory.getAPiece(s.charAt(i), col, row);				tmpQizi.addMouseListener(PML);				pieceArr.add(tmpQizi);				pieceIndex[col * 10 + row] = pieceArr						.getPiece(pieceArr.size() - 1);				col++;			}			i++;		}	}	public void loadBook(String book) {		try {			getSearchEngine().clearHash();			getSearchEngine().clearHistTab();			// arch.LoadBook("./data/BOOK.DAT");			getSearchEngine().loadBook(book);		} catch (IOException e1) {			e1.printStackTrace();		}	}	private void clearPicturePieces() {		for (int i = 0; i < pieceIndex.length; i++) {			pieceIndex[i] = null;		}		Qizi tmpQz = null;		int len = pieceArr.size();		for (int i = 0; i < len; i++) {			if ((tmpQz = pieceArr.remove(0)) != null) {				content.remove(tmpQz);			}		}	}	public void reverseBoard() {		boardReversed = !boardReversed;		displayAllQizi();	}	// public void	public void displayAllQizi() {		for (int i = 0; i < pieceIndex.length; i++) {			displayAQizi(pieceIndex[i]);		}	}	public void displayAQizi(Qizi qz) {		int x0, y0;		if (qz == null)			return;		setQzLocation(qz);		qz.setVisible(true);	}	public void setQzLocation(Qizi qz) {		int x0, y0;		x0 = qz.getCoordinateX();		y0 = qz.getCoordinateY();		if (boardReversed) {			x0 = 8 - x0;			y0 = 9 - y0;		}		qz.setLocation((int) (lineLoc + (x0 - 0.45) * boardGridSize),				(int) (lineLoc + (9 - y0 - 0.45) * boardGridSize));	}	public boolean undo() {		int oldSrc = activeBoard.lastMove().src;		int oldDst = activeBoard.lastMove().dst;		int oldCap = activeBoard.lastMove().cap;		if (oldSrc < 0 || oldDst < 0) {			log.info("End of undo!!.");			return false;		}		activeBoard.undoMove();		translation.moveCurrentToHis();		if (lastSelected != null) {			lastSelected.setBorderPainted(false);		}		lastSelected = pieceIndex[oldDst];		lastSelected.setBorderPainted(true);		changeLocation(lastSelected, oldSrc / 10, oldSrc % 10);		if (oldCap != 0) {			pieceIndex[oldDst] = capturedArr.remove(capturedArr.size() - 1);			pieceIndex[oldDst].setVisible(true);		}		return true;	}	public boolean redo() {		MoveNode tmpMove = translation.getHisMoveStruct();		if (tmpMove != null) {			int src = tmpMove.src;			int dst = tmpMove.dst;			movePiece(src, dst, false);			translation.moveHisToCurrent();			return true;		} else {			log.info("end of redo");			return false;		}	}	public void setAQizi(Qizi srcQz, int x, int y) {		pieceIndex[x * 10 + y] = srcQz;		srcQz.setCoordinate(x, y);	}	public void changeLocation(Qizi srcQz, int dstX, int dstY) {		// if dst has a qizi, move it to captured place[dst][1] and set to		// visible to false		int src = srcQz.getCoordinate();		int dst = dstX * 10 + dstY;		if (pieceIndex[dst] != null) {			pieceIndex[dst].setVisible(false);			capturedArr.add(pieceIndex[dst]);			pieceIndex[dst] = null;		}		pieceIndex[dst] = srcQz;		pieceIndex[dst].setCoordinate(dstX, dstY);		setQzLocation(pieceIndex[dst]);		pieceIndex[dst].setBorderPainted(true);		pieceIndex[src] = null;	}	// for mouseAction	public boolean movePiece(Qizi qz, int dstX, int dstY, boolean needSave) {		if (qz == null)			return false;		int srcX = qz.getCoordinateX(), srcY = qz.getCoordinateY();		AllMoves.GenMoves(activeBoard, HisTable);		MoveNode tmpMove = null;		int tmpSrc, tmpDst, moveNum = AllMoves.MoveNum;		for (int i = 0; i < moveNum; i++) {			tmpSrc = AllMoves.MoveList[i].src;			tmpDst = AllMoves.MoveList[i].dst;			if (tmpSrc == srcX * 10 + srcY && tmpDst == dstX * 10 + dstY) {				BitBoard pieceBoard = (activeBoard.getPieceBits(qz						.getPieceType())).getLeftShift(0);// copy to				// pieceBoard				tmpMove = new MoveNode(tmpSrc, tmpDst);				if (activeBoard.movePiece(tmpMove)) {					if (needSave)						translation.addMoveInfo(pieceBoard, qz, dstX, dstY);					log.info(translation.getEMoveStr() + "  "							+ translation.getCMoveStr());					if (isFirstStep) {						timeRule.resetTimeAndBeginCount();						isFirstStep = false;					}					return true;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -