汉诺塔游戏的设计(附代码)

汉诺塔游戏的设计

汉诺塔问题是最经典的递归问题,笔者就该问题设计了这个游戏,由用户交互游戏和自动演示两部分组成,支持撤销功能、选关、自动完成等功能。

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

//记录每一步的盘子的情况
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++)
    {

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值