中国象棋——C++编程设计(一)

[日期:2022-03-22] 作者:信息技术 次浏览 [字体: ]

中国象棋——C++编程设计

七年级5班  张意亮  指导教师 旷勇

  中国象棋是一款很多人都喜欢而且十分考验智力的游戏。今天我就尝试用C++来做一个双人对战版本的中国象棋游戏。但这款游戏利用C++开发真的是困难重重,为了解决这些问题我从书籍中、网络上查阅了很多的文章和资料参考进行开发。

 具体的设计思路为:1.利用图像处理头文件graphics.h生成一个画布,也就是棋盘;2.通过定义类的方法画出不同的中国象棋棋子;3.添加棋子的移动组件;4.添加棋子移动的限制组件;5.判断输赢的条件。

  首先,传统的C++的程序是一个黑色的仅仅支持文本输入输出的窗口,更让人抓狂的是无法用鼠标进行任何操作!这显然是无法让游戏参与者接受的,同时,这更是与象棋的操作习惯是违背的,所以以传统的代码是行不通的,我通过网上的资料介绍中得知需要使用一个外部导入的头文件easyx.h,使用其中的函数initgraphy(800,800,NOCLOSE),就可以方便地加载出一个自定义图形化窗口,接着使用其中的setbkcolor(WHITE)函数设置窗口颜色,再用cleardevice()函数显示颜色。

然后,需要将中国象棋的棋盘和棋子画出来。画棋子和棋盘时要注意坐标轴,程序中的坐标轴和数学中的坐标轴习惯是不一致的,是以左上角为原点,而且Y轴的方向更是朝下的。坐标轴问题可能会导致一些不知名的错误,使游戏无法正常进行,在从事软件开发时这一点尤为重要,具体过程不在展示,运行结果如下:


画出棋子后,便需要添加移动组件,其中最重要的是判断鼠标的按下,需要用MSOUEMSG类创建一个对象m,并且需要给m复制,代码如下:

MOSUEMSG m;

m=GetMouseMsg();

并进行一个判断,当m.msg.uMsg==WM_LBUTTONDOWN时,开始对棋子进行操作具体内容较为复杂不便讲解。并且在象棋当中各个棋子的移动会受限,如:兵未过河,只能向前走,过河后左右也可走,但不能后退;马会被蹩脚;士、象不能过河;王不能出宫等等,这些都是需要添加限制组件的,通过一个函数进行判断是否可以将棋子下到玩家所指定的地方。