資源簡介
本人用C語言寫的漢諾塔,采用遞歸的方法,并使用EasyX圖形庫將過程表示出來,內含詳細的注釋,代碼直觀
壓縮包里包含:
1.EasyX圖形庫安裝包,一鍵安裝,支持VC6和VS(VS2015也支持) ;
2.漢諾塔源代碼和可執行文件 。
使用方法:
1.解壓EasyX_20151015(beta),然后打開Setup.hta一鍵安裝圖形庫到VC6或VS ;
2.在VC6或VS中新建一個控制臺工程 ;
3.將源代碼添加到工程中 ;
4.編譯,運行
運行時,按任意鍵開始,按w鍵加速,按s鍵減速,按q鍵暫停
漢諾塔的盤子數可在程序中修改宏定義,初始化為20

代碼片段和文件信息
/*****************?(C)?COPYRIGHT?2016?Panda_Xiao?************************
*?File?Name?????????:?main.cpp
*?Author????????????:?Panda_Xiao
*?Date?First?Issued?:?2016/07/15
*?Description???????:?開發環境?VC++6.0含EasyX圖形庫
*?????????????????????漢諾塔
*
*
*************************************************************************
*?History:
*?
*
************************************************************************/
/*?Includes?-----------------------------------------------------------*/
#include?
#include?
#include?
#include?
#include?
/*?Macro?---------------------------------------------------------------*/
#define??TRUE???????????1
#define??FALSE??????????0
//針的標號
#define??FIRST_NEEDLE???1 //第一根針
#define??SECOND_NEEDLE??2???????//第二根針
#define??THIRD_NEEDLE???3 //第三根針
//盤子的信息
#define??DISH_NUM???????20 //盤子數量
#define??DISH_HIGH??????10 //單個盤子高度
#define??NEEDLE_HIGH????(DISH_HIGH*DISH_NUM*2) //針的高度
//窗口大小
#define??X_GUI_PIX??????(20*DISH_NUM*3+200)
#define??Y_GUI_PIX??????(NEEDLE_HIGH+100)
/*?Typedef?------------------------------------------------------------*/
//盤子的位置信息
typedef?struct??DISH_LOCATION
{
int???needle_num?;
int???needle_location?;
}?Dish_Location?;
//布爾值
typedef??int??BOOL?;
//盤子的信息
typedef?struct??DISH
{
int???dish_rad?;
Dish_Location??dish_location?;
}?Dish;
/*?Variables?----------------------------------------------------------*/
Dish??dish[DISH_NUM]?;
int???move_speed?=?7000?;
/*?Function?prototypes?------------------------------------------------*/
void??InitHanoiTower(void)?;
void??DrawGUI(void)?;
void??DrawDish(Dish?aBOOL?disable)?;
void??MoveHanoiTower(int?move_num??int?start_needle??int?finish_needle)?;
void??MovebaseDish(int?move_num??int?start_needle??int?finish_needle);
/************************************************************************
*?Function?Name ???:?main
*?Create?Date ???:?2016/07/15
*?Author ???:?Panda_Xiao
*?Description ???:?Main?Program
*?Param????????????????????:?None
*?Return?Code??????????????:?None
*?Global?Variable??????????:?None
*?File?Static?Variable?????:?None
*?Function?Static?Variable?:?None
************************************************************************/
int?main(void)
{
initgraph(X_GUI_PIXY_GUI_PIX)?; //初始化窗口大小
cleardevice()?; //清屏
HWND??hWnd?=?GetHWnd()?; //設置窗口標題
SetWindowText(hWnd“漢諾塔“)?;
InitHanoiTower()?; //初始化漢諾塔
DrawGUI()?; //畫出界面
getch()?; //按任意鍵開始
MoveHanoiTower(DISH_NUMFIRST_NEEDLETHIRD_NEEDLE)?; //將盤子從第一根針搬到第三根針
getch(); //按任意鍵退出窗口
return?0?;
}
/************************************************************************
*?Function?Name ???:?InitHanoiTower
*?Create?Date ???:?2016/07/15
*?Author ???:?Panda_Xiao
*?Description ???:?初始化漢諾塔
*?Param????????????????????:?None
*?Return?Code??????????????:?None
*?Global?Variable??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????814653??2017-01-08?12:46??EasyX_20151015(beta).zip
?????文件????????8823??2017-08-24?09:17??main.cpp
?????文件??????282678??2017-09-22?13:50??漢諾塔.exe
- 上一篇:c++計算器 類與對象的練習
- 下一篇:兩只船的裝載問題 回溯法
評論
共有 條評論