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]; } }

哦哦怕怕 LV11
2024年10月25日
gaotieyou LV5
2024年3月4日
HattaDeer LV1
2023年11月19日
syh1234569 LV1
2023年7月11日
555555556 LV1
2023年6月7日
紫罗兰的花语 LV2
2023年6月6日
微信网友_6444139264921600 LV8
2023年4月27日
象棋选手 LV1
2023年4月24日
123324df LV1
2023年4月11日
177771717717 LV1
2023年3月8日

林黛玉倒拔鲁智深 LV1
4月9日
上善若水丶丶
3月31日
暂无贡献等级
dengjing LV5
2月4日
hifriend2000
1月7日
暂无贡献等级
哦哦怕怕 LV11
2024年10月25日
破剑茶寮 LV4
2024年6月26日
3334004690 LV10
2024年6月22日
谭亚朋123 LV2
2024年4月29日
69hertz LV1
2024年4月27日
微信网友_6925124216311808
2024年3月27日
暂无贡献等级