中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
2013-10-21 08:38
661 查看
本篇详细介绍,在中国象棋程序中,如何构造一个棋子。
1.棋子类的定义。
2.棋子类的属性。
3.详细介绍棋子的每一个属性。
3.1 id
棋子id,枚举类型。
保证棋子ID是唯一的,并且容易理解。
中国象棋中一共有32个不同的棋子,每一个棋子都是相互独立的。
3.2 category
棋子类别,枚举类型。
保证棋子类别是唯一的,并且容易理解。
中国象棋中一共有11种不同类型的棋子。
32个棋子,有32个id是很容易理解的。
很多人肯定会问,为什么要定义11个分类?
車馬炮,JU, MA, PAO 之所以没有区分是“红方”还是“黑方”,是考虑到 車馬炮可以“位于棋盘中的任何一个位置”。
車馬炮棋子移动的规则,不需要区分到底是“红方”还是“黑方”。
而象、士、将、卒HONGXIANG, HEIXIANG, HONGSHI, HEISHI, JIANG, SHUAI, ZU, BING却需要区分,是因为
这些棋子“只能位于棋盘中有限的位置”,方便在棋子移动等游戏规则的实现。
3.3 name
棋子所属方的名字,String类型。
可选的值是“黑方”或“红方”。
这个名字容易产生“误解”,误认为是“棋子的名字”。
3.4 position
棋子在棋盘中的坐标,Point类型。
坐标范围 {(x,y)| 1<=x<=9,1<=y<=10}
印象中,在高中数学中,是这样表示集合的吧!
为什么会存在“坐标”的概念?
本中国象棋程序-楚汉棋兵,棋盘是用“二维数组”表示的,方便理解。
棋子的坐标,对实现棋子的移动规则有很大帮助。
3.5 width
宽度,int类型。
程序中用的是44-4=40,代表宽40像素。
3.6 height
高度,int类型
程序中用的是44-4=40,代表高40像素。
4.构造一个棋子。
获取棋子图片
相关阅读
特别说明:我的CSDN博客FansUnion和我的独立博客小雷网(FansUnion.cn)几乎是同一时间发表(10秒内)。
如果有兴趣,强烈建议持续关注我的CSDN博客FansUnion,最近3月,每周发表3到10篇原创。
未来计划
未来3个月到1年,我将尽快把中国象棋-楚汉棋兵系列,全部写完。
觉得还不错的,帮我“顶”啊!
原文参见:http://FansUnion.cn/articles/2883
1.棋子类的定义。
public class ChessPiece extends JLabel 棋子是一个继承自JLabel的图形界面组件,当添加到棋盘中的时候,看起来比较美观。
2.棋子类的属性。
/** * 棋子的类别 */ private PieceCategory category; /** * 棋子所属方的名字:黑方或红方 */ private String name; /** * 棋子的宽度 */ private int width; /** * 棋子的高度 */ private int height; /** * 棋子的id */ private PieceId id; /** * 棋子的坐标 1<=x<=9,1<=y<=10 */ private Point position;
3.详细介绍棋子的每一个属性。
3.1 id
棋子id,枚举类型。
public static enum PieceId { HONGJU1, HONGJU2, HONGMA1, HONGMA2, HONGXIANG1, HONGXIANG2, HONGSHI1, HONGSHI2, SHUAI, HONGPAO1, HONGPAO2,BING1, BING2, BING3, BING4, BING5, HEIJU1, HEIJU2, HEIMA1, HEIMA2, HEIXIANG1, HEIXIANG2, HEISHI1, HEISHI2, JIANG, HEIPAO1, HEIPAO2, ZU1, ZU2, ZU3, ZU4, ZU5; }
保证棋子ID是唯一的,并且容易理解。
中国象棋中一共有32个不同的棋子,每一个棋子都是相互独立的。
3.2 category
棋子类别,枚举类型。
public static enum PieceCategory { JU, MA, PAO, HONGXIANG, HEIXIANG, HONGSHI, HEISHI, JIANG, SHUAI, ZU, BING }
保证棋子类别是唯一的,并且容易理解。
中国象棋中一共有11种不同类型的棋子。
32个棋子,有32个id是很容易理解的。
很多人肯定会问,为什么要定义11个分类?
車馬炮,JU, MA, PAO 之所以没有区分是“红方”还是“黑方”,是考虑到 車馬炮可以“位于棋盘中的任何一个位置”。
車馬炮棋子移动的规则,不需要区分到底是“红方”还是“黑方”。
而象、士、将、卒HONGXIANG, HEIXIANG, HONGSHI, HEISHI, JIANG, SHUAI, ZU, BING却需要区分,是因为
这些棋子“只能位于棋盘中有限的位置”,方便在棋子移动等游戏规则的实现。
3.3 name
棋子所属方的名字,String类型。
可选的值是“黑方”或“红方”。
这个名字容易产生“误解”,误认为是“棋子的名字”。
3.4 position
棋子在棋盘中的坐标,Point类型。
坐标范围 {(x,y)| 1<=x<=9,1<=y<=10}
印象中,在高中数学中,是这样表示集合的吧!
为什么会存在“坐标”的概念?
本中国象棋程序-楚汉棋兵,棋盘是用“二维数组”表示的,方便理解。
棋子的坐标,对实现棋子的移动规则有很大帮助。
3.5 width
宽度,int类型。
程序中用的是44-4=40,代表宽40像素。
3.6 height
高度,int类型
程序中用的是44-4=40,代表高40像素。
4.构造一个棋子。
/** 构造函数,初始化棋子的信息 */ public ChessPiece(PieceId id, String name, PieceCategory category, int width, int height) { this.id = id; this.category = category; ImageIcon imageIcon = PieceUtils.getImageIcon("jiang.png"); this.width = imageIcon.getIconWidth(); this.height = imageIcon.getIconHeight(); this.name = name; // 将棋子图片的大小设置为“首选大小”,这样棋子看起来和图片一模一样 this.setPreferredSize(new Dimension(width, height)); switch (id) { case HONGJU1: case HONGJU2: setIcon(PieceUtils.getImageIcon("hongju.png")); break; validate(); repaint(); }
获取棋子图片
public final class PieceUtils{ private static HashMap<String, ImageIcon> imageIcons; static { imageIcons = new HashMap<String, ImageIcon>(); String[] imgNames = { "bing.png", "hongju.png", "hongma.png", "hongxiang.png", "hongshi.png", "shuai.png", "hongpao.png", "zu.png", "heiju.png", "heima.png", "heixiang.png", "heishi.png", "heipao.png", "jiang.png" }; int size = imgNames.length; for (int index = 0; index < size; index++) { ImageIcon imageIcon = ChessUtils.getImageIcon("piece/" + imgNames[index]); imageIcons.put(imgNames[index], imageIcon); } } public static ImageIcon getImageIcon(String imgName) { return imageIcons.get(imgName); } }
相关阅读
中国象棋程序的设计与实现(零)--原始版源码
中国象棋程序的设计与实现(一)--项目截图
中国象棋程序的设计与实现(二)--源码
中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题
中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
中国象棋程序的设计与实现(七)--心得体会和开发日志
CSDN博客目标:CSDN第一综合性博客特别说明:我的CSDN博客FansUnion和我的独立博客小雷网(FansUnion.cn)几乎是同一时间发表(10秒内)。
如果有兴趣,强烈建议持续关注我的CSDN博客FansUnion,最近3月,每周发表3到10篇原创。
未来计划
未来3个月到1年,我将尽快把中国象棋-楚汉棋兵系列,全部写完。
觉得还不错的,帮我“顶”啊!
原文参见:http://FansUnion.cn/articles/2883
相关文章推荐
- 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
- 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
- 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- [置顶] 中国象棋程序的设计与实现(原始版)(包含源码)
- 中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题
- 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
- 中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题
- 中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题
- 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
- 中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题
- 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
- 中国象棋程序的设计与实现(七)--心得体会和开发日志
- 中国象棋程序的设计与实现(十二)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)