当前位置: 首页 > news >正文

网站建设兼职爱站网收录

网站建设兼职,爱站网收录,源码分享,天津网站开发建设前言 SimpleCG的使用方法在前面已经介绍了许多,有兴趣的同学如果有去动手,制作一些简单动画应该没多大问题的。所以这次我们来演示一下简单动画。我们刚学习C语言的递归函数时,有一个经典例子相信很多同学都写过,那就是汉诺塔。那…

前言

        SimpleCG的使用方法在前面已经介绍了许多,有兴趣的同学如果有去动手,制作一些简单动画应该没多大问题的。所以这次我们来演示一下简单动画。我们刚学习C语言的递归函数时,有一个经典例子相信很多同学都写过,那就是汉诺塔。那么我们今天就来写一个汉诺塔的直观动画演示。

运行程序下载bin/AnimateHannuo.zip · master · b2b160 / SimpleCG_Demo · GitCode

一、全部源码


#include "../import/include/CGBoard.h"
#include "math.h"
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MT.lib")
#endif#define C_FLOOR_CNT		7
#define C_FLOOR_BOTTOM  380
#define C_HAN_HEIGHT	10
#define C_HAN_SPEED		30int g_nWidth = 640;		//画面宽度
int g_nHeight= 400;		//画面高度
enum ENUM_DIRECTION
{enumDIR_NULL,enumDIR_UP,enumDIR_DOWN
};
struct tagHannuo
{int nNumber;COLORREF nColor;int nWidth;int nPosHan;int nDir;POINT ptPos;
};tagHannuo g_pHannuo[C_FLOOR_CNT];
int g_nMoving = -1;
void DrawHan()
{int i;int j=0;setlinewidth(2);for(i=0;i<3; i++ ){_line( 100 + 200 * i, 50, 100 + 200 * i,C_FLOOR_BOTTOM );_line( 20 + 200 * i, C_FLOOR_BOTTOM, 180 + 200 * i,C_FLOOR_BOTTOM );}int nIndex = 0;for(j=0;j<3;++j){nIndex = 0;for(i=C_FLOOR_CNT-1;i>=0; i-- ){if(g_pHannuo[i].nPosHan == j && i != g_nMoving){setfillcolor(g_pHannuo[i].nColor);_solidrectangle( 100 +200 * g_pHannuo[i].nPosHan - g_pHannuo[i].nWidth/2, C_FLOOR_BOTTOM - nIndex * C_HAN_HEIGHT - C_HAN_HEIGHT, 100 +200 * g_pHannuo[i].nPosHan + g_pHannuo[i].nWidth/2, C_FLOOR_BOTTOM - nIndex * C_HAN_HEIGHT);++nIndex;}}}
}
void DrawMoving()
{if(g_nMoving>=0){setfillcolor(g_pHannuo[g_nMoving].nColor);_solidrectangle( g_pHannuo[g_nMoving].ptPos.x, g_pHannuo[g_nMoving].ptPos.y, g_pHannuo[g_nMoving].ptPos.x + g_pHannuo[g_nMoving].nWidth, g_pHannuo[g_nMoving].ptPos.y+ C_HAN_HEIGHT);}
}
void DrawAll()
{ClearDevice();DrawHan();DrawMoving();ReflushWindow();
}
void Moving( int nItem, int nFrom, int nTo )
{g_nMoving = nItem;g_pHannuo[nItem].ptPos.x = 100 +200 * nFrom - g_pHannuo[nItem].nWidth/2;for( g_pHannuo[nItem].ptPos.y = C_FLOOR_BOTTOM - C_FLOOR_CNT * C_HAN_HEIGHT; IsShowingWindow()&&g_pHannuo[nItem].ptPos.y>40; g_pHannuo[nItem].ptPos.y-=10 ){DrawAll();Sleep(C_HAN_SPEED);}int nXStep = (nTo - nFrom) * 5;int nDest = 100 +200 * nTo - g_pHannuo[nItem].nWidth/2;for( g_pHannuo[nItem].ptPos.x = 100 +200 * nFrom - g_pHannuo[nItem].nWidth/2; IsShowingWindow()&&abs(g_pHannuo[nItem].ptPos.x-nDest)>5; g_pHannuo[nItem].ptPos.x+=nXStep ){DrawAll();Sleep(C_HAN_SPEED);}g_pHannuo[nItem].ptPos.x = 100 +200 * nTo - g_pHannuo[nItem].nWidth/2;for( g_pHannuo[nItem].ptPos.y = 40; IsShowingWindow()&&g_pHannuo[nItem].ptPos.y<C_FLOOR_BOTTOM - C_FLOOR_CNT * C_HAN_HEIGHT; g_pHannuo[nItem].ptPos.y+=10 ){DrawAll();Sleep(C_HAN_SPEED);}g_nMoving = -1;g_pHannuo[nItem].nPosHan = nTo;
}
void MoveHan( int nFloor, int nFrom, int nTo, int nMiddle )
{if( nFloor == 1 ){Moving( nFloor-1, nFrom-1, nTo-1);return;}MoveHan( nFloor-1, nFrom, nMiddle, nTo );Moving( nFloor-1, nFrom-1, nTo-1);MoveHan( nFloor-1, nMiddle, nTo, nFrom );
}
void DrawProcess()
{bool bIsRunning = true;int i;srand(GetTickCount());for(i=0;i<C_FLOOR_CNT; i++ ){g_pHannuo[i].nNumber=i+1;g_pHannuo[i].nColor = RGB(rand()%200,rand()%200,rand()%200);g_pHannuo[i].nDir = enumDIR_NULL;g_pHannuo[i].nPosHan = 0;g_pHannuo[i].nWidth = 20*(i+1);}MoveHan(C_FLOOR_CNT,1,2,3);DrawAll();
}
int _tmain(int argc, _TCHAR* argv[])
{//初始化if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))return 1;//关闭图库CloseBoard();return 0;
}

对于写过汉诺塔的同学来说,程序逻辑应该没什么难度,就是在递归程序上增加了动画过程。

二、演示效果

对于5层来说是不难的,但递归对于层数增加所带来的时间消耗是呈指数增加的,所以通过动画来观察层数增加带来的时间消耗非常直观。在原始的汉诺塔里是64层,要移完所有的层数将会世界末日,因为即便到世界的尽头也无法完成。有兴趣的同学可以把代码输入并把层数加大看看。

三、代码下载

汉诺塔演示源代码

AnimateHannuo · master · b2b160 / SimpleCG_Demo · GitCode

库安装方法如下

SimpleCG库安装使用_b2b160的博客-CSDN博客

http://www.hkea.cn/news/473931/

相关文章:

  • 站长工具seo综合查询权重百度在线搜索
  • 伊犁网站建设评价怎样才能上百度
  • 房地产网站建设方案百度实名认证
  • 做外贸可以在哪些网站注册网络项目免费的资源网
  • 中国建设银行信用卡网站首页青岛关键词优化平台
  • 阿里云网站建设考试题目长沙网站推广服务公司
  • 甘肃建设项目审批权限网站俄罗斯搜索引擎yandex官网入口
  • 网站建设公司新员工培训ppt模板百度热门搜索排行榜
  • 仿魔客吧网站模板网址大全是ie浏览器吗
  • 网站产品后台界面怎么做湖南关键词排名推广
  • 网站数据每隔几秒切换怎么做的湖南百度seo排名点击软件
  • 网站制作先学什么百度新闻下载安装
  • 河南省网站建设哪家好免费观看行情软件网站进入
  • 粘合剂东莞网站建设体育热点新闻
  • 百度网站排名关键词整站优化培训网站建设
  • 网络平台代理seo外包 杭州
  • 东方头条网站源码免费推广软件工具
  • 北京网站建设公司分享网站改版注意事项流程优化四个方法
  • 案例学 网页设计与网站建设手机百度seo快速排名
  • 江门网站建设总部电话产品推广渠道有哪些
  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo