windows MFC——汉罗塔可视化移动程序

本文详细介绍了使用Windows MFC实现汉诺塔的可视化移动程序,包括需求分析、系统模型、界面设计和重要类及方法的说明。程序通过设置圆盘数量、颜色、尺寸,以及开始和退出按钮,展示圆盘移动过程。在移动完成后,会弹出对话框提示用户。程序采用二维模型,用平面图形表示圆盘和塔座,并通过堆栈和队列解决绘制和移动过程中的覆盖、多余和遗漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

          汉诺塔可视化移动过程

    班级:计科1203班   姓名:杜杨浩   学号:2012310200707 

问题描述:假设有三个塔座:X,Y,Z,在塔座X上有N个直径大小各不相同,按圆盘大小从小到大编号为1,2,…,N的圆盘。要求将X塔座上N个圆盘移动到塔座Z上,并仍按同样顺序叠排。圆盘移动时必须遵守下列规则:

(1)        每次只能移动一个圆盘

(2)        圆盘可以加到塔座XYZ中任意一个上

(3)        任何时刻都不能将一个较大的圆盘放在较小的圆盘之上

   要求将圆盘移动的整个过程用可视化图形的方式表现出来。

     

汉诺塔可视化移动过程设计说明书

一、需求分析:

       该实验的核心目标就是将圆盘移动的整个过程用可视化的方式表现出来,具体的还有如下功能实现:

1)  设置圆盘的颜色和塔座的颜色(圆盘的边缘颜色与塔座颜色一致)

2)  设置圆盘的数量和圆盘的最大尺寸

3)  设置开始按钮和退出按钮,分别控制程序的开始和退出

4)  在圆盘整个移动过程结束后会弹出一个对话框,提示用户圆盘移动过程已结束,当用户点击弹出对话框确定按钮时,弹出对话框和原对话框均消失

二、系统模型:

    该程序采用二维模型,用平面图形来表示三维物体。

 

三、界面设计:

该程序设置了6个下拉列表框用于分别设置圆盘的颜色和塔座的颜色。另设置了2个下拉列表框用于设置圆盘的数量和最大圆盘的尺寸。另附设两个按钮,分别为开始按钮和退出按钮。将每个塔座用英文字母代表以静态文本框的形式表现出来。上述是控件的界面设计,下面是核心的圆盘动态移动过程的界面设计:

首先,圆盘的每一次移动过程如下:假设现在是X——>Y(圆盘从塔座X移动到塔座Y),那么界面的显示顺序是这样的:

1)         X塔座上去掉最顶层的圆盘后所剩圆盘的全部显示,X塔座上原最顶层的圆盘在X塔座的顶端(即表现出要离开X塔座),Y、Z塔座显示原有的所有圆盘。

2)         X塔座上原最顶层的圆盘由X顶端移动到Y顶端,其它不变

3)         X塔座上原最顶层的圆盘由Y塔座顶端移动到Y塔座上所有圆盘的最顶层,其它不变

 

这样圆盘的一次移动过程结束,每一次的移动过程都由诸如上述步骤顺序组合显示,这样整个移动过程就是每一次移动过程的累加了。最后当整个圆盘移动过程结束,会弹出一个对话框,提示用户圆盘移动过程已经结束。但用户点击弹出式对话框确定按钮时,弹出式对话框会关闭,并且原对话框也关闭,整个界面显示过程结束。

 

四、系统中重要类及方法的说明:

该程序设计中除了MFC自带的对话框类,我还设计了两个一般类,和一个对话框类。其中一般类和MFC自带对话框类的设计是关键,自行设计的对话框类只是为了作为弹出式对话框提示用户相关结束信息。下面主要讲解一下两个一般类和MFC自带的对话框类。

首先是两个一般类。分别为disk类和tazuo类。disk类即为圆盘类。有颜色和尺寸两类属性。对应方法有五个,分别为:

int Get_color_red(); //获取圆盘颜色RGB中的红色信息

int Get_color_green();//获取圆盘颜色RGB中的绿色信息

int  Get_color_blue();//获取圆盘颜色RGB中的蓝色信息

void Set_digits(int size); //设置圆盘的半径

int Get_digits(); //获取圆盘的半径

而tazuo类的属性和方法相对较少。其属性为int cr,cg,cb;分别代表塔座颜色RGB中的R、G、B信息。对应的方法有三个,分别为:

      int Get_color_red(); //获取塔座颜色RGB中的红色信息

      int Get_color_green();//获取塔座颜色RGB中的绿色信息

      int Get_color_blue();//获取塔座颜色RGB中的蓝色信息

接着详细介绍一下MFC自带的对话框类。在该类中我附加了如下属性:

bool paintbegin; //用于标识是否可以开始绘图

      int diskred;//用于记录下拉列表框中圆盘颜色RGB值中的R信息

      int diskgreen;// 用于记录下拉列表框中圆盘颜色RGB值中的G信息

      int diskblue;// 用于记录下拉列表框中圆盘颜色RGB值中的B信息

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值