#include<stdio.h>
char chst[10][20]={" | "," # "," ### "
," ##### "," ####### "," ######### "
," ########### "," ############# "," ############### "
,"################# "},
chst1[3][20]={" "
," V "
," ^ "},ch;
int hanoi[9][3]={1,0,0
,2,0,0
,3,0,0
,4,0,0
,5,0,0
,6,0,0
,7,0,0
,8,0,0
,9,0,0},
up=0,down=0,state=0,total=0;
/*用up来记录上面的光标的位置,
用down来记录下面的光标的位置,用total来记录移动汉诺塔的总次数,
用state来记录目前的光标所在的位置,0代表在上面,1代表在下面*/
void
output()
{
int i,j;
if(!state)
for(i=0;i<3;i++)
if(i==up)
printf("%s",chst1[1]);
else
printf("%s",chst1[0]);
putchar('\n');
for(i=0;i<9;i++)
{
for(j=0;j<3;j++)
printf("%s",chst[hanoi[i][j]]);
putchar('\n');
}
if(state)
for(i=0;i<3;i++)
if(i==down)
printf("%s",chst1[2]);
else
printf("%s",chst1[0]);
putchar('\n');
}
void
change(int ini,int goal)
/*本函数的功能是将第(ini+1)的位置的汉诺塔移动到第(goal+1)个汉诺塔的位置,
若移动不成功则打印出"\\\\\\本次汉诺塔移动失败!//"*/
{
int i,in;
for(i=0;i<9;i++)
if(hanoi[i][ini]!=0)
break;
if(i==9)
i--;
in=i;
for(i=0;i<9;i++)
if(hanoi[i][goal]!=0)
break;
if(i==9)
i--;
if(hanoi[in][ini]!=0&&(hanoi[in][ini]<hanoi[i][goal]||hanoi[i][goal]==0))
{
if(hanoi[i][goal]==0)
hanoi[i][goal]=hanoi[in][ini];
else
hanoi[i-1][goal]=hanoi[in][ini];
hanoi[in][ini]=0;
total++;
}
else
puts("\n\n\t\\\\\\\\\\\\本次汉诺塔移动失败!//\n");
}
void
input()
{
printf("You have moved the hanoi %d times , and please continue:\n",total);
ch=getch();
/*接受方向键的输入*/
if(!state)
switch(ch)
{
case 75:/*左方向键的ASCⅡ码的值为75*/
up--;
if(up==-1)
up=2;
break;
case 77:/*右方向键的ASCⅡ码的值为77*/
up++;
if(up==3)
up=0;
break;
case 80:/*下方向键的ASCⅡ码的值为80*/
state=1;
down=up;
break;
}
else
switch(ch)
{
case 75:
down--;
if(down==-1)
down=2;
break;
case 77:
down++;
if(down==3)
down=0;
break;
case 80:
state=0;
change(up,down);
up=down;
break;
}
}
int
judge()/*判断是否已经达到目标*/
{
int i;
for(i=0;i<9;i++)
if(hanoi[i][2]!=i+1)
return 1;
return 0;
}
int main()
{
int i;
puts("操作方法:\n在这个游戏中,你可以使用左下右这三个方向键.\n左右键是移动光标,下键是确认.");
do
{
output();
input();
}
while(judge());
for(i=0;i<6;i++)
puts("CONGRATULATIONS!!!!!!");
printf("You got it!!!!!!\nAnd you have moved the hanoi %d times finally\n",total);
return 0;
}
程序运行之后: