1. 程式人生 > >漢諾塔簡單圖形設計思想1(C)

漢諾塔簡單圖形設計思想1(C)

我們都知道漢諾塔遊戲,在C語言程式設計中,我們也可以簡單的設計出它的圖形,但是如何動態設計初始化漢諾塔的層數呢?這看起來有點棘手,但是隻要觀察其中的規律就可以用for迴圈語句的巢狀和if...else語句的巢狀設計出,至於更復雜的填充顏色這裡就不說了,只以學習其中的一些演算法和思想為目的

下面為是實現效果:

程式碼如下:

#include <stdio.h>
#define N 10  //陣列的行 
#define M 19  //陣列的列
char a[N][M]; //定義一個二維字元陣列來表示漢諾塔的圖形

void InitHanoi(int n) //初始化圖形
{
	for(int i=0; i<10; i++)  //控制行
	{
		for(int j=0; j<19; j++)//控制列
		{	
			if(j==9)           //第九列作為中間柱子
				a[i][j] = '|'; //列印“|”作為漢諾塔的中間柱子
			else
			{
				if(i>=N-n)   //輸出n層漢諾塔的盤子
				{
					int k=i+n-10+1; //隨著i(行)的增加,列印*的左右範圍擴大
					if(j>=9-k&&j<=9+k)
						a[i][j] = '*';//*作為漢諾塔的盤子
				}
				else                  //除了列印漢諾塔外就列印空字元 
				{
					a[i][j] = ' ';
				}
			}
		}
	}
}
void DrawHanoi()   //列印漢諾塔
{
	for(int i=0; i<10; i++)
	{
		for(int j=0; j<19; j++)
		{
			printf("%c",a[i][j]);
		}
		printf("\n");     //列印完一行換行
	}
	printf("----------------------\n");
}
int main()
{	int n; //漢諾塔的層數
	printf("請輸入漢諾塔的層數:");
	scanf("%d",&n);//(漢諾塔層數要小於10大於0)
	InitHanoi(n); //初始化漢諾塔的陣列
	DrawHanoi();  //列印漢諾塔
	return 0;
}