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

📄 mainstrategy.java

📁 一款JAVA款的跳棋
💻 JAVA
字号:
package org.yushang.jumpchess.strategy;

import org.yushang.jumpchess.pkg.Chess;
import org.yushang.jumpchess.pkg.ChessBoard;
import org.yushang.jumpchess.pkg.Player;
import org.yushang.jumpchess.pub.BoardArea;
import org.yushang.jumpchess.pub.Position;

public class MainStrategy extends Strategy {

	public MainStrategy(ChessBoard chessBoard, Player player) {
		super(chessBoard, player);
	}

	public MainStrategy(ChessBoard chessBoard, Player player, Step step) {
		super(chessBoard, player, step);
	}
	
	private boolean isComplete() {
//		是否所有的棋子,都快到目的区域
		//条件1:到Postion[0]最远的不超过10,条件2:到Postion[0]的和不超过70
		int Distance = 0;
		int maxDistance = Integer.MIN_VALUE;
		Position position = player.getArea().getOppsiteArea().getAreaPositions()[0];		
		
		Chess[] chesses = player.getChesses();
		for (int i = 0; i < chesses.length; i++) {
			Position chessPosition = chessBoard.getPosition(chesses[i]);
			int d = position.getDistance(chessPosition);
			if (maxDistance < d) {
				maxDistance = d;
			}
			Distance += d;
		}
		
		if ((maxDistance <= 10) && (Distance < 70)) {
			return true;
		} else {
			return false;	
		}
		
	}
	
	private Position getDestPosition() {
		BoardArea destArea = player.getArea().getOppsiteArea();
		Position[] destAreaPositions = destArea.getAreaPositions();
		Position destPosition = null;			

		for (int i = 0; i < destAreaPositions.length; i++) {
			Chess chess = chessBoard.getChess(destAreaPositions[i]);
			if ( (chess == null) || 
				 (chess.GetColor() != player.GetColor()) 
				) {
				destPosition = destAreaPositions[i];				
				break;
			}
		}	

		return destPosition;		
	}
	
	private int Amend() {
		int Score = 0;

		BoardArea destArea = player.getArea().getOppsiteArea();
		Position[] destAreaPositions = destArea.getAreaPositions();
		
		for (int i = 0; i < destAreaPositions.length; i++) {
			if ((chessBoard.getChess(destAreaPositions[i]) == null) ||
				(chessBoard.getChess(destAreaPositions[i]).GetColor() != player.GetColor())) {
				switch (i) {
				case 0:
					Score += 3;
					break;
				case 1:			
				case 2:
					Score += 2;
					break;
				case 3:
				case 4:
				case 5:
					Score += 1;
				default:
					break;
				}
			}
		}	
		
		return Score;
	}
	
	private int CalculateScoreComplete() {
//		得到目标位置		
		Position destPosition = getDestPosition();
		
		//计算分数
		Chess[] chesses = player.getChesses();
		BoardArea destArea = player.getArea().getOppsiteArea();
		int Score = 0;		
		if (destPosition != null) {
			for (int i = 0; i < chesses.length; i++) {
				if (! destArea.isInclude(chessBoard.getPosition(chesses[i]))) {					
					Score += chessBoard.getPosition(chesses[i]).getDistance(destPosition);
				}
			} 
		}
		
		//修正				
		Score += Amend();

		return Score;
	}
	
	private int CalculateScoreUnComplete() {
		//得到目标位置		
		Position destPosition = player.getArea().getOppsiteArea().getAreaPositions()[0];
		//计算分数
		Chess[] chesses = player.getChesses();
		int Score = 0;		
		if (destPosition != null) {
			for (int i = 0; i < chesses.length; i++) {					
				Score += chessBoard.getPosition(chesses[i]).getDistance(destPosition);
			} 
		}
		return Score;
	}

	public int CalculateScore() {
		//TODO 可以再完善	
		//System.out.println("IsComplete:" + Boolean.toString(isComplete()));		

		if (isComplete()) {
			return CalculateScoreComplete();			
		} else {
			return CalculateScoreComplete();
		}
	}

}

⌨️ 快捷键说明

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