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

📄 jiang.java

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

import java.util.*;

import com.catking.Utility.*;


public class Jiang extends Chess{

	public Jiang(int color) {
		super(color);
		// TODO Auto-generated constructor stub
		
		this.name = (color == ATTACK_UP )?'帥':'將';
	}

	@Override
	public void go() {
		// TODO Auto-generated method stub
		System.out.print((color == ATTACK_UP )?"帅":"将");
	}

	@Override
	public Set<Position> availableSteps() {
		// TODO Auto-generated method stub
		Set<Position>set = new HashSet<Position>();
		//老将走田字格的每条边
		//left
		if(y != 3 && ChessPane.chesses[x][y-1].color != color)
			set.add(new Position(x, y-1));
		//right
		if(y != 5 && ChessPane.chesses[x][y+1].color != color)
			set.add(new Position(x, y+1));
		
		if(color == ATTACK_DOWN ){
			if(x != 2 && ChessPane.chesses[x+1][y].color != color)	//out
				set.add(new Position(x+1, y));
			if(x != 0 && ChessPane.chesses[x-1][y].color != color)	//in
				set.add(new Position(x-1, y));
		}else{
		//attack_up
			if(x != ChessPane.ROWS - 3 
					&& ChessPane.chesses[x-1][y].color != color)	//out
				set.add(new Position(x-1, y));
			if(x != ChessPane.ROWS - 1
					&& ChessPane.chesses[x+1][y].color != color)	//in
				set.add(new Position(x+1, y));
			
		}
		//System.out.println("有"+set.size()+"条道路");
		return set;
	}
	//更新棋表中将军的位置,便于将军方法的实现
	@Override
	public int setPos(int x, int y, boolean alter) {
		// TODO Auto-generated method stub
		ChessPane.jiangPos[color].x = x;
		ChessPane.jiangPos[color].y = y;
		
		return super.setPos(x, y, alter);
	}

	
	//覆盖父类
	public boolean isJiangJun(){
		//老将将军的方式只有老将照明,不同于普通棋子的将军方式
		int index = Math.abs(color-3);			//得到对方将军位置1->2 2->1
		int indexY = ChessPane.jiangPos[index].y;		//对方将军的列
		int indexX = ChessPane.jiangPos[index].x;
		
		if(indexY == y){		//可能会老将照面
			int min = Math.min(indexX, x);
			int max = Math.max(indexX, x);
			for(int i = min+1; i < max; ++i){
				
				if(ChessPane.chesses[i][y].color != KONG)	//中间有棋子
					return false;
			}
			//中间没有棋子  老将会面了 应该是刚刚动棋的那方的老将被将了
			ChessPane.isJiangJunState[ChessPane.pre_player] = true;
			//提示音
			Utilities.playSound("Wav/jiangzhaomian.wav");
			
			return color == ChessPane.pre_player;			//刚动棋子一方的将被将了									
		}
		
		return false;
	}

	


}

⌨️ 快捷键说明

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