汉诺塔游戏的设计
汉诺塔问题是最经典的递归问题,笔者就该问题设计了这个游戏,由用户交互游戏和自动演示两部分组成,支持撤销功能、选关、自动完成等功能。
首先建立了类CMap,该类主要实现用户每一步的操作和画图显示功能,记录的时候只须记录每组盘子的个数和盘子的矩形。代码和注释如下:
//记录每一步的盘子的情况
class CMap
{
public:
//每组盘子的个数
int iCount[3];
//3组盘子里面,每个盘子的位置,用矩形表示
RECT *Rect[3];
//构造函数
CMap()
{
//三组盘子,每组盘子的矩形
for(int i=0;i<3;i++)
Rect[i]=new RECT[NUM];
//初始化每组盘子的个数
iCount[0]=NUM;
iCount[1]=0;
iCount[2]=0;
//第一组盘子的矩形的位置
for(i=0;i<NUM;i++)
{
Rect[0][i].left=Center[0]-(NUM-i)*Dx2;
Rect[0][i].right=Center[0]+(NUM-i)*Dx2;
Rect[0][i].bottom=(NUM+1-i)*Dx;
Rect[0][i].top=(NUM-i)*Dx;
}
//第二组盘子的矩形初始化为空
for(i=0;i<NUM;i++)
{
Rect[1][i].left=0;
Rect[1][i].right=0;
Rect[1][i].bottom=0;
Rect[1][i].top=0;
}
//第三组盘子的矩形初始化为空
for(i=0;i<NUM;i++)
{