首先建立了类CMap,该类主要实现用户每一步的操作和画图显示功能,记录的时候只须记录每组盘子的个数和盘子的矩形。代码和注释如下:

解决方案 »

  1.   

    //记录每一步的盘子的情况
    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++)
    {
    Rect[2][i].left=0;
    Rect[2][i].right=0;
    Rect[2][i].bottom=0;
    Rect[2][i].top=0;
    }
    }
      

  2.   

    //运算符重载
    CMap operator=(CMap Other)
    {
    //对新的CMap对象,应该重新分配内存
    for(int i=0;i<3;i++)
    Rect[i]=new RECT[NUM];
    //依次赋值
    for(i=0;i<3;i++)
    {
    iCount[i]=Other.iCount[i];
    for(int j=0;j<NUM;j++)
    Rect[i][j]=Other.Rect[i][j];
    }
    //返回
    return *(this);
    }
    //画图,显示盘子的情况
    void OnDraw(HDC hdc)
    {
    //画出每个盘子
    for(int i=0;i<3;i++)
    for(int j=0;j<iCount[i];j++)
    Rectangle(hdc,
    Rect[i][j].left,
    Rect[i][j].top,
    Rect[i][j].right,
    Rect[i][j].bottom);
    }
    //析构函数