我想用MFC编写汉诺塔,但是不知道需要把汉诺塔的类定义在那个类下面,即,哪个类是他的基类,还有我要做动画演示,需要使用支持暂停功和继续的功能(在自动搬移过程中可以暂停,并继续)以及暂停后,可以将当前的状态保存(碟子和塔的组合关系)。可以从7中保存的文件中读出某个状态,并继续移动。
这些怎么设计,我想用定时器函数,但我不知道怎么暂停,现在请教大家,我的QQ229468032,欢迎指教
这些怎么设计,我想用定时器函数,但我不知道怎么暂停,现在请教大家,我的QQ229468032,欢迎指教
因为要动画演示,肯定要用定时器。塔的坐标、移动速度等众参数都保存到汉诺塔类里,然后Dlg下定时器更新里跟新参数,而在dlg的onpaint里进行实际绘制。思路就这样。
(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) 中添加适当的初始化操作。
#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函数
Show(){
CDC *pDC=GetDC();
ReleaseDC(pDC);
}
为什么编译可以通过,运行就出现内存泄露了呢
Dish是继承view类的