C++实现双人中国象棋(一) |
您所在的位置:网站首页 › html象棋游戏小程序界面设计 › C++实现双人中国象棋(一) |
一、简介
最近突发奇想,要使用C++做一个双人象棋的程序,昨天肝了一天,终于把算法部分完成了,下面把开发过程中的经验分享一下。 开发环境:Visual Studio 2019 语言标准:C++11及以上 纠错:暂无 二、准备工作知识要求: 熟练掌握C++语言面向对象编程的知识(继承,多态) 掌握STL的基本操作 了解中国象棋基本规则(不会还有人不知道中国象棋规则吧!) 象棋棋盘尺寸为9×10,9列10行 象棋摆法 由于这是双人象棋,所以算法主要就是判断胜负(容易实现)和判断棋子能否走到某个地方(难点)。这篇博客主要就介绍这两个问题。 程序主要由以下几个类组成: Point 记录棋盘中的一个坐标,并且附带基本功能,如判断在红方区域还是黑方区域,是否在九宫格中等。ChessBoard 棋盘类,管理所有棋子。ChessPiece 所有棋子的基类,也是一个抽象类。七种棋子分别对应的七个类 都是ChessPiece的子类。ChessGame象棋游戏类,管理先后手、胜负等。 关于棋子的存储关于棋子的存储,有两种方式,一是把红黑双方棋子分别存储到两个容器中,优点是便于知道一方还有哪些棋子,但知道坐标查找棋子则很困难。 还有一种方法,是用一个10×9的数组(0-4红方区域,5-9黑方区域,这一点很重要),分别存储每个棋子或空(nullptr),优点是知道坐标便于查找棋子,但知道一方还有哪些棋子则很困难。 为了方便,我们把这两种方法综合起来,既分别存储双方棋子,又存储棋盘状态。 四、代码实现以下代码均在Chess.h中。 一些常量的声明 const bool BLACK = 0, RED = 1; const uint8_t NONE = 2; Point最简单的一个类,无脑写就行。 class Point { public: int8_t x, y; Point(int8_t nx, int8_t ny) :x(nx), y(ny) {} bool ColorOfTheArea()const//判断在红方区域还是黑方区域 { if (y = 3 && x 移到指定位置->吃掉原有棋子(如果有),所以这个函数没必要是虚函数,直接按照流程来即可。注意,在非虚函数中调用虚函数是可行且有效的。在开始下面的之前,我先说一下,为了查找各个中国象棋棋子的英文名称,我焦头烂额地百度了大半天,才找到一个比较靠谱的。下面的英文名称就是按照这个来的。 車(Rook)
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |