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

📄 chesspanetest.java

📁 SWT实现人人的象棋程序 供学习SWT的同志做个参考
💻 JAVA
字号:
package com.catking.chess;
import java.util.*;

import com.catking.GUI.chessBoard.ChessBoard;
import com.catking.Utility.*;


public class ChessPaneTest implements ChessKind{
	public static Chess[][] chesses ;
	public static int ATTACK_UP_BANK;
	public static int ATTACK_DOWN_BANK;
	public static boolean isRedDown;
	
	public static final int ROWS = 10;
	public static final int COLS = 9;
	public static Position[] jiangPos;
	public static Boolean[] isJiangJunState;			//记录双方是否被将军
	public static int pre_player;
	
	
	////////////////////////
	//GUI 
	//chess所画的地方
	public static ChessBoard canvas;
	////////////////////////
	
	//摆完整的棋谱
	public  static void init(ChessBoard c, boolean isRedDown){
		
		ChessPane.isRedDown = isRedDown;
		ATTACK_UP_BANK = isRedDown?5:4;
		ATTACK_DOWN_BANK = isRedDown?4:5;
		
		chesses = new Chess[ROWS][COLS];
		for(int i=0; i < ROWS; ++i)
			for(int j=0; j < COLS; ++j)
				chesses[i][j] = new Kong(KONG);
		//红色棋子在下方
		int blackX, redX;
		blackX = isRedDown?0:9;
		redX = isRedDown?9:0;
		
		chesses[blackX][0] = new Ju(ATTACK_DOWN);
		chesses[redX][0] = new Ju(ATTACK_UP);
		chesses[blackX][1] = new Ma(ATTACK_DOWN);
		chesses[9][1] = new Ma(ATTACK_UP);
		chesses[blackX][2] = new Xiang(ATTACK_DOWN);
		chesses[redX][2] = new Xiang(ATTACK_UP);
		chesses[blackX][3] = new Shi(ATTACK_DOWN);
		chesses[redX][3] = new Shi(ATTACK_UP);
		chesses[blackX][4] = new Jiang(ATTACK_DOWN);
		chesses[redX][4] = new Jiang(ATTACK_UP);
		chesses[blackX][5] = new Shi(ATTACK_DOWN);
		chesses[redX][5] = new Shi(ATTACK_UP);
		chesses[blackX][6] = new Xiang(ATTACK_DOWN);
		chesses[redX][6] = new Xiang(ATTACK_UP);
		chesses[blackX][7] = new Ma(ATTACK_DOWN);
		chesses[redX][7] = new Ma(ATTACK_UP);
		chesses[blackX][8] = new Ju(ATTACK_DOWN);
		chesses[redX][8] = new Ju(ATTACK_UP);
		
		blackX = isRedDown?2:7;
		redX = isRedDown?7:2;
		
		chesses[blackX][1] = new Pao(ATTACK_DOWN);
		chesses[blackX][7] = new Pao(ATTACK_DOWN);
		chesses[redX][1] = new Pao(ATTACK_UP);
		chesses[redX][7] = new Pao(ATTACK_UP);
		
		blackX = isRedDown?3:6;
		redX = isRedDown?6:3;
		for(int i=0; i < 9; i+=2){
			chesses[blackX][i] = new Bing(ATTACK_DOWN);
			chesses[redX][i] = new Bing(ATTACK_UP);
		}
		for(int i=0; i < ROWS; ++i)
			for(int j=0; j < COLS; ++j){
				chesses[i][j].x = i;
				chesses[i][j].y = j;
			}
		jiangPos = new Position[3];
		isJiangJunState = new Boolean[3];
		//将军位置
		jiangPos[ATTACK_UP] = new Position(9, 4);
		jiangPos[ATTACK_DOWN] = new Position(0, 4);
		//两边都没有被将
		isJiangJunState[ATTACK_UP] = false;
		isJiangJunState[ATTACK_DOWN] = false;
		pre_player = KONG;						//尚未动棋子
	}
	public static void print(){
		System.out.println("\n**********************");
		for(int i = 0; i < ROWS; ++i){
			for(int j = 0; j < COLS; ++j){
				chesses[i][j].go();
			}
			if(i == 4)
				System.out.println("\n---------楚河  汉界---------");
			else
				System.out.println();
		}
		System.out.println("\n**********************");
	}
	//负责检查两个老将的被将状态
	public static void checkJiangJunState(){
		Set<Bool>state = new HashSet<Bool>();
		for(int i=0; i < ROWS; ++i){
			for(int j=0; j < COLS; ++j){
				System.out.print(chesses[i][j].isJiangJun());
				state.add(new Bool(chesses[i][j].isJiangJun()));
			}
			System.out.println();
		}
		//如果某个棋子将对方军,它已经更新了ChessPane.isJiangJunState了
		//所以只要更新刚刚动完棋的一方被将军状态有未解除
		if(!state.contains(new Bool(true)))
			isJiangJunState[pre_player] = false;
			
		System.out.println("将军"+"attack up:"+isJiangJunState[ATTACK_UP]);
		System.out.println("将军"+"attack down:"+isJiangJunState[ATTACK_DOWN]);
	}
	
}

⌨️ 快捷键说明

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