我想用MFC编写汉诺塔,但是不知道需要把汉诺塔的类定义在那个类下面,即,哪个类是他的基类,还有我要做动画演示,需要使用支持暂停功和继续的功能(在自动搬移过程中可以暂停,并继续)以及暂停后,可以将当前的状态保存(碟子和塔的组合关系)。可以从7中保存的文件中读出某个状态,并继续移动。 
这些怎么设计,我想用定时器函数,但我不知道怎么暂停,现在请教大家,我的QQ229468032,欢迎指教

解决方案 »

  1.   

    汉诺塔的类新建一个,MFC用基于对话框的简单,所以实例化一个汉诺塔类到C..Dlg类下面。
    因为要动画演示,肯定要用定时器。塔的坐标、移动速度等众参数都保存到汉诺塔类里,然后Dlg下定时器更新里跟新参数,而在dlg的onpaint里进行实际绘制。思路就这样。
      

  2.   

    1.又不是什么特殊的类,直接在类视图上NewClass就OK2.给View类添加WM_TIMER响应函数 给你的控制单元MENU(也在View类中,就是你通过类向导加上去的按钮)添加Commond与Update_Commomd_UI响应函数3.在CView类中定义bool PLAY 并在CView构造函数中初始化Play=FALSE;4.相关函数
    (1)
    void CTestView::OnMENUPlay() 
    {
    // TODO: Add your command handler code here
    Play=Play?FALSE:TRUE;
    if (Play)
    {
    //设置动画的时间步
    SetTimer(1,15,NULL);
    }
    else
    KillTimer(1);
    }(2)
    void CTestView::OnUpdateMENUPlay(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    if(Play)
    pCmdUI ->SetCheck(TRUE);
    else
    pCmdUI ->SetCheck(FALSE);
    }(3)
    在OnTimer(UINT nIDEvent) 中添加适当的初始化操作。
      

  3.   

    汉诺塔问题用递归最好解决了..#include <stdio.h>
    #include <iostream>
    using namespace std;//移动盘块
    void Move(int n, char X, char Y)
    {
    static int i = 0; 
    i++;
    printf("Step%d ", i);
    printf("%c->%c\n", X, Y);
    }/*
    参数: n 塔上的盘个数
    A, B, C 分别代表三个塔
    */
    void Hanoi(int n, char A, char B, char C)
    {
    if (n == 1)
    {
    Move(1, A, C);
    }
    else
    {
    Hanoi(n - 1, A, C, B ); //将前n-1个盘从A移动到B, C塔作辅助
    Move(n, A, C); //将第n个盘从A移到C
    Hanoi(n - 1, B, A, C ); //将前n-1个盘从A移动到B, C塔作辅助
    }
    }int main()
    {
    Hanoi(3, 'A', 'B', 'C');
    system("pause");
    return 0;
    }这是个控制台程序,改成MFC的话,自己再修改Move函数
      

  4.   

    我定义了一个Dish类,其实做了一个成员函数
    Show(){
       CDC *pDC=GetDC();
       ReleaseDC(pDC);
    }
    为什么编译可以通过,运行就出现内存泄露了呢
    Dish是继承view类的