首页>代码>分享网上找到的一个中国象棋源码>/中国象棋/src/com/yaoyun/chess/entity/ChessMan.java
package com.yaoyun.chess.entity;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.io.Serializable;

import com.yaoyun.chess.util.FontUtil;

@SuppressWarnings("serial")
public class ChessMan implements Serializable {

	private int oldX = -1; // 棋子上一步所在位置的x坐标
	private int oldY = -1; // 棋子上一步所在位置的y坐标
	private int newX = -1; // 棋子现在所在位置的x坐标
	private int newY = -1; // 棋子现在所在位置的y坐标
	private boolean redMove = true; // 红棋先行
	private String[] chessStr = { "车", "马", "象", "士", "将", "炮", "卒", "兵", "炮", "车", "马", "相", "士", "帅" };
	private static int[][] chessFlag = new ChessFlag().getChessFlag();
	private boolean[][] select = new boolean[10][9]; // 保存棋子被选中的坐标

	/*
	 * 功能: 画出象棋棋盘中的棋子
	 */
	public void drawChessMan(Graphics g) {
		// 转成2D模式
		Graphics2D g2d = (Graphics2D) g;
		// 获取当前的画刷
		Stroke stroke = g2d.getStroke();

		// 遍历棋盘中所有的位置
		for (int i = 0; i < chessFlag.length; i++) {
			for (int j = 0; j < chessFlag[i].length; j++) {
				// 判断指定位置是否有棋子
				if (chessFlag[i][j] != 0) {

					// 把棋子数组的下标转换成棋子的坐标
					int x = (j + 1) * 60;
					int y = (i + 1) * 60;

					// 判断指定位置的棋子是否被选中
					if (select[i][j]) {
						// 设置画刷的颜色
						g2d.setColor(new Color(0, 200, 0));
						// 设置画刷的大小
						g2d.setStroke(new BasicStroke(3));
						// 画选中棋子时的棋子边框
						g2d.drawLine(x - 25, y - 20, x - 25, y - 25);
						g2d.drawLine(x - 25, y + 20, x - 25, y + 25);
						g2d.drawLine(x - 20, y - 25, x - 25, y - 25);
						g2d.drawLine(x - 20, y + 25, x - 25, y + 25);
						g2d.drawLine(x + 25, y - 20, x + 25, y - 25);
						g2d.drawLine(x + 25, y + 20, x + 25, y + 25);
						g2d.drawLine(x + 25, y + 25, x + 20, y + 25);
						g2d.drawLine(x + 25, y - 25, x + 20, y - 25);
						// 还原为默认画刷
						g2d.setStroke(stroke);

						// 把棋子设为没有选中的状态
						select[i][j] = !select[i][j];
					}

					// 画内圆
					g2d.setColor(new Color(219, 196, 154));
					g2d.fillOval(x - 25, y - 25, 50, 50);

					// 画大外圆
					g2d.setColor(new Color(109, 98, 77));
					g2d.drawOval(x - 25, y - 25, 50, 50);

					// 根据棋子的所属一方,显示不同的棋子颜色
					if (chessFlag[i][j] < 8) {
						g2d.setColor(Color.RED);
					} else {
						g2d.setColor(Color.BLACK);
					}
					// 画小外圆
					g2d.drawOval(x - 20, y - 20, 40, 40);

					g2d.setFont(FontUtil.myFont2);
					String newstring = new String(chessStr[chessFlag[i][j] - 1]);
					g2d.drawString(newstring, x - 20, y + 10);

				}
			}
		}
	}

	public int getOldX() {
		return oldX;
	}

	public boolean isRedMove() {
		return redMove;
	}

	public void setRedMove(boolean redMove) {
		this.redMove = redMove;
	}

	public void setOldX(int oldX) {
		this.oldX = oldX;
	}

	public int getOldY() {
		return oldY;
	}

	public void setOldY(int oldY) {
		this.oldY = oldY;
	}

	public int getNewX() {
		return newX;
	}

	public void setNewX(int newX) {
		this.newX = newX;
	}

	public int getNewY() {
		return newY;
	}

	public void setNewY(int newY) {
		this.newY = newY;
	}

	// 获取棋子对应的字符串
	public String[] getChessStr() {
		return chessStr;
	}

	// 获取棋盘中所有棋子的位置
	public int[][] getChessFlag() {
		return chessFlag;
	}

	// 设置棋子对应的字符串
	public void setChessFlag(int[][] chessFlag) {
		ChessMan.chessFlag = chessFlag;
	}

	// 设置棋子的坐标
	public void setChessFlag(int i, int j, int z) {
		chessFlag[i][j] = z;
	}

	// 获取选中状态
	public boolean[][] getSelect() {
		return select;
	}

	// 设置选中状态
	public void setSelect(int i, int j) {
		select[i][j] = !select[i][j];
	}

}
最近下载更多
gaotieyou  LV5 3月4日
HattaDeer  LV1 2023年11月19日
syh1234569  LV1 2023年7月11日
555555556  LV1 2023年6月7日
紫罗兰的花语  LV2 2023年6月6日
微信网友_6444139264921600  LV6 2023年4月27日
象棋选手  LV1 2023年4月24日
123324df  LV1 2023年4月11日
177771717717  LV1 2023年3月8日
快乐的程序员  LV25 2023年1月21日
最近浏览更多
暂无贡献等级
xiaozhi丶  LV13 3月24日
gaotieyou  LV5 3月4日
吃茶去  LV1 2月29日
ClydeSon  LV5 2023年12月28日
HattaDeer  LV1 2023年11月19日
微信网友_6736227375157248  LV1 2023年11月15日
hmx1688 2023年10月12日
暂无贡献等级
iloveyou66  LV2 2023年9月1日
liuxijun  LV2 2023年8月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友