整体架构如上
1.很直观地去看这个中国象棋的界面,数一下它有多少行和多少列.
10行,9列:要注意这里数的是安放象棋的位置,有10行9列
这里我们首先想到的必然是二维数组,每一个行列交叉的点都设置成二维数组a[i][j]这样的格式,以此来确定棋盘上面每一个棋子的位置和走向.
我们把上面安放棋子的二维数组定义成一个地图,也就是map[i][j]的格式,但同时要注意,每一个象棋棋子都有行,列,颜色,是否过河和名称(也就是什么棋子)几种定义区分.
那么这里我们就需要把棋子定义成一个结构.如下:
当定义了棋子综合信息,我们是不是需要每一个信息都拓展一下/p>
x代表的是在棋盘上面的列,也就是竖行,y代表的是棋子在棋盘上面的行,也就是横线,而type代表的棋子的颜色,棋子颜色可以分为黑色和红色两种;river设置成bool型的,只需要判断棋子是否过河就可以了.最后id定义的是棋子上面的名称,比如将,帅等.
接下来我们就来VS当中进行棋子的程序定义拓展:
distance longth 和high我们都把其设置成宏,这个就要回溯到棋盘上面,把棋盘假设成一个xy的二维坐标,那么要定义每一个棋子的位置,或者说是每一行与每一列的交叉点,就要用到上面三个宏定义.
比如左上角第一个棋子的坐标可以表示为:
map[0][0].x=distance;
map[0][0].y=distance
而第一行第二个棋子的坐标可以表示为:
map[1][0].x=distance+longth;
map[1][0].y=distance
依次类推……
我们可以推断出每一个棋子的坐标,都可以通过上面几个宏定义以及棋子的实际行列表示出来,
这里我们把棋子的id设置成一个联合结构数组,因为里面的棋子的id都基本不同,同时我们考虑到了棋子要进行运动,把棋子的开始状态设置为BEGIN
而新建一个move的结构,表示鼠标选中棋子的基本信息.begin的行列和结束的行列和运行状态.
最后回到棋子id上面,我们是不是需要把这些id都设置到棋子或者棋盘上面啊,采用常量字符数组的形式,把棋盘上面所有的棋子都表示出来.
而把刚才的map[i][j]二维数组同样定义成一个二维结构数组.如下:
同时,我们设置了AImap[i][j]的二维结构数组,看看是否下面在进行棋子移动的时候,我们会用到.
这里i=9,j=10是根据我们上面看中国象棋棋盘得到的数据.
2.我们要开始加载图片信息了,把我们已经有的棋盘素材放在同文件下面,然后采用下面程序,就可以在窗口当中显示出中国棋盘的背景图.
至于,loadimage()和initgraph()函数以及putimage()函数三者的基本理解和解释,建议去搜索,都有比较详细的解释.这里我们解释一下initgraph()函数的基本含义:
这个函数用于初始化绘图环境。
参数:
width 绘图环境的宽度。
height 绘图环境的高度。
flag 绘图环境的样式,默认为 NULL。
上面程序的基本思路也就不言而喻:先加载或者找到我们素材的地址,然后定义出素材的宽和长度,然后再输出这个棋盘背景.
当输出完背景之后,我们是不是要先把所有的棋子放在初始位置,也就是初始化棋盘/p>
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!