2019独角兽企业重金招聘Python工程师标准>>>

本篇简要介绍棋盘类的定义、棋盘的关键属性、棋盘绘制算法的骨架。

棋盘的详细绘制算法等内容,我们将在接下来的几篇进行详细介绍。

棋盘类的定义

public abstract class ChessBoard extends JPanel

棋盘是一个继承自JLabel的图形界面组件,当在界面展示,看起来比较美观。

细心的读者注意到,abstract表明 这是一个抽象类。

本中国象棋程序,实现了联网对战、残局打谱、全局打谱、人机对弈等多种形式的功能。

不同的功能,它们所对应的棋盘有一些差别,因此,将共同的功能和设计,抽象为一个类。

棋盘类的关键属性

// 棋子点,共90个,横9*纵10public ChessPoint chessPoints[][];// 红方16个棋子public ChessPiece 红車1, 红車2, 红馬1, 红馬2, 红相1, 红相2, 红帥, 红仕1, 红仕2, 红兵1, 红兵2,红兵3, 红兵4, 红兵5, 红炮1, 红炮2;// 黑方16个棋子public ChessPiece 黑車1, 黑車2, 黑馬1, 黑馬2, 黑象1, 黑象2, 黑將, 黑士1, 黑士2, 黑卒1, 黑卒2,黑卒3, 黑卒4, 黑卒5, 黑炮1, 黑炮2;

构造棋盘对象

/*** 构造棋盘*/public ChessBoard() {super();// 不可忽视setLayout(null);// 设置棋盘的背景色setBackground(getBackgroundColor());// 鼠标适配器addMouseListener(getMouseAdapter());// 初始化棋子点chessPoints = new ChessPoint[X + 1][Y + 1];for (int i = 1; i <= X; i++) {for (int j = 1; j <= Y; j++) {chessPoints[i][j] = new ChessPoint(i * UNIT_WIDTH, j* UNIT_HEIGHT);}}// 为32个棋子分配空间init32Pieces();// 初始化32个棋子的工具提示init32PiecesTooltip();// 棋谱类chessManual = new ChessManual(this);// 初始化炮和兵的位置,以便画出标记initPBFlag();// 棋子闪烁线程winkThread = new Thread(this);winkThread.start();}

到目前的讲解,读者朋友只能读懂上面的一部分代码。

棋盘是GUI界面的重要的关键的组成部分,和其它模块交互比较多,理解起来有点费事。

不过,不要紧,先读下去,等了解了更多信息后,再回头来读。

绘制棋盘

/*** 绘制棋盘:10条横线、9条纵线、炮兵卒14个标记、九宫格、楚河漢界** 根据需要还绘制棋子移动的标记*/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));// 绘制竖线标记drawShuXianFlag(g2);}

以上,是棋盘绘制算法的骨架。

棋盘截图

考虑到棋盘的绘制比较复杂,我们将在下一篇,详细介绍如何绘制棋盘。

网友的一个吐槽

"楼主的中文命名法 让我和蛋疼。"

参见 http://blog.csdn.net/fansunion/article/details/12903991

答:車馬炮等中国象棋中的一些名词,是中国独有的游戏。翻译成对应的英文,比较费事。

假设我翻译成了英文,我看得懂,但是很多人是分不清的。

首先,我有一套自己的编码规范,但是我不会为了所谓的“编码规范”,把自己“束缚”了。

该灵活的就灵活,如果谁看了不舒服,可以修改成自己习惯的方式。

相关阅读

中国象棋程序的设计与实现(零)--原始版源码

中国象棋程序的设计与实现(一)--项目截图

中国象棋程序的设计与实现(二)--源码

中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料

中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划

中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题

中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)

中国象棋程序的设计与实现(七)--心得体会和开发日志

中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)

中国象棋程序的设计与实现(九)–棋子点,棋子的小窝

原文参见:http://FansUnion.cn/articles/2905

转载于:https://my.oschina.net/jiutianniao/blog/400049

中国象棋程序的设计与实现(十)--棋盘的定义和绘制相关推荐

  1. 中国象棋程序的设计与实现(十)--棋盘的定义和绘制 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等) 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝...

    本篇简要介绍棋盘类的定义.棋盘的关键属性.棋盘绘制算法的骨架. 棋盘的详细绘制算法等内容,我们将在接下来的几篇进行详细介绍. 棋盘类的定义 public abstract class ChessBoa ...

  2. 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)...

    本篇简要介绍,在中国象棋程序中,容纳棋子的棋子点. 由于棋子位于棋盘中,为了方便讲解本篇,需要先简要介绍下棋盘的结构. 棋盘的结构 // 棋子点,共90个,横9*纵10 public ChessPoi ...

  3. 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)

    本篇详细介绍,在中国象棋程序中,如何构造一个棋子. 1.棋子类的定义. public class ChessPiece extends JLabel 棋子是一个继承自JLabel的图形界面组件,当添加 ...

  4. 中国象棋程序的设计与实现(十二)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)

    上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架. 本篇,我们将详细解读棋盘绘制算法的每一个细节. 强烈建议,大家结合文章末尾的"棋盘截图"来思考绘制 ...

  5. 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝

    本篇简要介绍,在中国象棋程序中,容纳棋子的棋子点. 由于棋子位于棋盘中,为了方便讲解本篇,需要先简要介绍下棋盘的结构. 棋盘的结构 // 棋子点,共90个,横9*纵10  public ChessPo ...

  6. golang | 使用goroutine和channel实现一个计算int64随机数各位数和的程序。

    文章目录 能不能不用结构体写 程序 能不能不用结构体写 关键点没想明白,做个记录. 使用goroutine和channel实现一个计算int64随机数各位数和的程序. 程序 package maini ...

  7. java象棋代码注释_中国象棋程序的设计与实现(十一)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)...

    上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架. 本篇,我们将详细解读棋盘绘制算法的每一个细节. 强烈建议,大家结合文章末尾的"棋盘截图"来思考绘制 ...

  8. 中国十大IC设计公司和十大最有潜力IC公司2010

    原文地址:http://www.2ic.cn/blog-420600-16187.html 十大IC设计公司: 北京中星微电子有限公司,福州瑞芯微电子有限公司,上海海尔集成电路有限公司,深圳芯邦科技股 ...

  9. 程序员应知道这十大面向对象设计原则

    面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式, 而没有把足够多的 ...

最新文章

  1. Resource entery xx is already defined
  2. Spring JdbcTemplate配置
  3. 商品评价 - 实现分页
  4. 横向排列两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
  5. 开窍小老虎,一步一个脚印之 初识汇编(一)
  6. Jupyter Notebook的15个技巧和窍门,可简化您的编码体验
  7. 趣挨踢 | 阿里员工吐槽:我在阿里工作五年,面试一个小公司竟然挂了
  8. 【2016年第1期】大数据隐私保护技术综述(下)
  9. 作为一个女程序员,无奈!
  10. 九度OJ 题目1011:最大连续子序列
  11. Spring框架学习---Spring Framework上篇
  12. 导航一体机端口测试软件,导航端口查看器
  13. TOAD 调试存储过程的方法
  14. uni-app微信小程序——商城(8)——订单详情
  15. Klog开发笔记——分页插件 Kaminari 介绍
  16. 创品牌强农精品培育消费引领 国稻种芯百团计划行动发布
  17. 【c++】factory的使用:create和destory,以cicadaplayer的render实现为例
  18. Visitor(访问者模式)
  19. ROS教程:视觉传感器使用漫谈
  20. BaiduPCS-Go百度网盘不限速下载(2019年7月13日13:28:26成功)

热门文章

  1. nginx+php-fpm页面显示空白的解决方法
  2. 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
  3. 2018年1月3日-江苏地税系统无法正常登陆的解决方案
  4. 【Golang】解决Go test执行单个测试文件提示未定义问题
  5. SQL内部连接3个表?
  6. 对预检请求的响应未通过访问控制检查
  7. rosweb,roslib,ROS2D.PolygonMarker 绘制多边形
  8. ros自定义service消息.srv文件中增加自定义.msg消息
  9. Menu菜单资源Android
  10. Shiro Spring 集成xml配置