文档章节

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

FansUnion
 FansUnion
发布于 2015/10/22 10:29
字数 735
阅读 8
收藏 0
点赞 0
评论 0

本篇简要介绍,在中国象棋程序中,容纳棋子的棋子点。

由于棋子位于棋盘中,为了方便讲解本篇,需要先简要介绍下棋盘的结构。

棋盘的结构

// 棋子点,共90个,横9*纵10
 public ChessPoint chessPoints[][];

棋盘由90个点组成。(后续文章,将详细介绍棋盘)

棋子点

每一个正常的棋子都位于棋盘上的一个点,棋子点就是一个棋子的“小窝”。

这个点有坐标(x,y),并且存放着棋子的引用。

public class ChessPoint{
    /**
     * 棋子点的物理坐标-x轴
     */
    private int x;
    /**
     * 棋子点的物理坐标-y轴
     */
    private int y;
    /**
     *  棋子的引用
     */
     private ChessPiece piece;

     /**
     * 这个点是否存在棋子
     * @return 存在,返回<code>true</code>;否则,返回<code>fasle</code>
     */
    public boolean hasPiece() {
        return piece != null;
    }

    public void setHasPiece(boolean hasPiece) {
        // 很重要
        if (!hasPiece) {
            piece = null;
        }
    }

    public Point getPoint() {
        return new Point(x, y);
    }

}


初始化

// 初始化棋子点
        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);
            }
        }


相关常量

   // 棋盘的水平方向可容纳棋子的点的个数
    public static final int X = 9;

    // 棋盘的垂直方向可容纳棋子的点的个数
    public static final int Y = 10;

    // 棋盘单元格的宽度
    public static int UNIT_WIDTH = ChessPiece.UNIT_WIDTH;
    // 棋盘单元格的高度
    public static int UNIT_HEIGHT = ChessPiece.UNIT_HEIGHT;

更多细节,我们将在讲解棋盘等相关章节的时候,进一步介绍ChessPoint。

特别说明

棋子点的坐标和棋子的坐标是不同的。

棋子在棋盘中的坐标,Point类型。 坐标范围 {(x,y)| 1<=x<=9,1<=y<=10}

棋子点在棋盘中的坐标,坐标范围 {(x,y)| 1*UNIT_WIDTH<=x<=9*UNIT_WIDTH,1*UNIT_HEIGHT<=y<=10*UNIT_HEIGHT}


相关阅读

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

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

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

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

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

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

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

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

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

未来计划

未来3个月到1年,我将尽快把中国象棋-楚汉棋兵系列,全部写完。

觉得还不错的,帮我“顶”啊!

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
FansUnion
粉丝 56
博文 857
码字总数 825464
作品 0
丰台
高级程序员

暂无相关文章

Boost库编译应用

版本:Boost 1.66.0 Windows库编译 官网指南:直接执行bootstrap.bat处理文件即可,可以我却遇到一堆的问题。 环境:Windows 10 + Visual Studio 2017 Boost编译出来库命名 boost库生成文件命...

水海云 ⋅ 23分钟前 ⋅ 0

解决Eclipse发布到Tomcat丢失依赖jar包的问题

如果jar文件是以外部依赖的形式导入的。Eclipse将web项目发布到Tomcat时,是不会自动发布这些依赖的。 可以通过Eclipse在项目上右击 - Propertics - Deployment Assembly,添加“Java Build ...

ArlenXu ⋅ 23分钟前 ⋅ 0

iview tree组件层级过多时可左右滚动

使用vue+iview的tree组件,iview官网iview的tree树形控件 问题描述:tree层级过多时左右不可滚动 问题解决:修改overflow属性值 .el-tree-node>.el-tree-node_children { overflow: vi...

YXMBetter ⋅ 25分钟前 ⋅ 0

分布式锁

1.通过数据库实现 http://www.weizijun.cn/2016/03/17/%E8%81%8A%E4%B8%80%E8%81%8A%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E8%AE%BE%E8%AE%A1/ 2.ZK实现:curator-recipes分布式锁的......

素雷 ⋅ 33分钟前 ⋅ 0

Sublime Text3 快捷键

选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。 Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名...

AndyZhouX ⋅ 40分钟前 ⋅ 0

XamarinAndroid组件教程RecylerView自定义适配器动画

XamarinAndroid组件教程RecylerView自定义适配器动画 如果RecyclerViewAnimators.Adapters命名空间中没有所需要的适配器动画,开发者可以自定义动画。此时,需要让自定义的动画继承Animation...

大学霸 ⋅ 40分钟前 ⋅ 0

eureka 基础(二)

使用Eureka服务器进行身份验证 如果其中一个eureka.client.serviceUrl.defaultZone网址中包含一个凭据(如http://user:password@localhost:8761/eureka)),HTTP基本身份验证将自动添加到您...

明理萝 ⋅ 43分钟前 ⋅ 1

Kubernetes(五) - Service

Kubernetes解决的另外一个痛点就是服务发现,服务发现机制和容器开放访问都是通过Service来实现的,把Deployment和Service关联起来只需要Label标签相同就可以关联起来形成负载均衡,基于kuberne...

喵了_个咪 ⋅ 43分钟前 ⋅ 0

更新队友POM文件后报错

打开报错的地方的pom及其引用方法所在文件的pom,观察其版本号是否一致,不一致进行更改

森火 ⋅ 57分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部