上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架。
本篇,我们将详细解读棋盘绘制算法的每一个细节。
强烈建议,大家结合文章末尾的“棋盘截图”来思考绘制算法细节,不然,很可能会遇到问题。
有些绘制细节,很难懂,不好描述,不再详细叙述。
1.绘制算法骨架
/**
* 绘制棋盘
*
* 绘制棋盘背景
*
*
* 10条横线
*
* 9条纵线
*
*
* 炮兵卒14个标记
*
*
* 九宫格
*
*
* 楚河漢界
*
*
* 如果有棋子移动,画出2个提示框,每个提示框由8条线组成
*
*
* 绘制可选走法的提示框
*
*
* 绘制竖线标记
*
*
*
* 根据需要还绘制棋子移动的标记
*/
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制棋盘背景
drawBackgroundImage(g);
Graphics2D g2 = (Graphics2D) g;
// 兵、卒、炮标记笔画
BasicStroke bsFlag = new BasicStroke(2);
// 楚河汉界、棋盘边框笔画
BasicStroke bsLine = new BasicStroke(2);
// 棋盘线笔画
BasicStroke bs1 = new BasicStroke(1);
// 绘制直线
drawLines(g2, bsLine, bs1);
// 绘制九宫格
drawJiuGongLines(g2, bs1);
// 绘制楚河漢界
drawChuheHanjieString(g2);
// 绘制炮和兵标记
drawPaoBingFlag(g2, bsFlag);
// 如果有棋子移动,画出2个提示框,每个提示框由8条线组成
drawMoveFlag(g2);
// 绘制可选走法的提示框
drawWillMoveFlag(g2);
// 设置字体和线宽,为画坐标做准备
BasicStroke bsOld = new BasicStroke(1);
g2.setStroke(bsOld);
g2.setFont(new Font("宋体", Font.PLAIN, 14));
g2.setColor(new Color(0, 0, 0));