基于MFC的汉诺塔可视化程序设计(手动移动)

MFC实现汉诺塔可视化移动
本文介绍了一款基于MFC的汉诺塔可视化程序设计,允许用户通过手动拖动盘子进行移动。程序包含三个绘图区表示三根柱子,能设置层数,支持非法操作检测并提供移动提示。通过结构体表示圆盘,类表示柱子,实现了盘子的添加、清除和移动等功能。

程序源码下载链接点这里

汉诺塔简介

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

程序要实现的功能

设置三个绘图区,表示三桌子(程序中用桌子table表示汉诺塔中的柱子),在每个绘图区中放置盘子(用椭圆代替),可以通过程序设置汉诺塔的层数,利用鼠标拖动的方式进行盘子的移动,对非法操作(如大盘放在小盘之上或者移动不存在的圆盘)进行报错并终止运行,移动完成后进行提示,并结束运行。可以对移动中的相关属性进行设置。

柱子和圆盘的数据结构实现

每一个圆盘用一个结构体表示,结构体中的成员变量为盘子水平方向上与边沿的距离(盘子从下到上不断变小)、盘子底部的坐标。代码如下:

struct element
{
	 int pan_w;      //盘子水平方向上与边沿的距离
	 int pan_bottom;  //盘子底部的位置
};

每个table用一个类表示,类成员包括table的名称(A,B,C)、table上盘子信息(用vector对盘子信息进行管理)、绘图区域和每个盘子的高度(汉诺塔的层数不一样,盘子的平均厚度就不一样)。成员函数有清除圆盘和绘图。代码如下:

class hannuo       //这个类用于记录每个table上的圆盘信息并在相应的位置绘图
{
public:
	hannuo(void);
	~hannuo(void);

public:
	 void draw();   //在指定的位置绘制圆盘
	 void clear();  //清除该柱子上的所有数据

publi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值