一聚教程网:一个值得你收藏的教程网站

热门教程

汉诺塔

时间:2022-07-02 11:03:18 编辑:袖梨 来源:一聚教程网


才学C不久,编了个汉诺塔。比较麻烦,仅供修改指正吧。

Tubro C for Win下通过。

/*汉诺塔,想用链表表做但是不太会:')*/
#include
#include
#include

#define N 7          /*方块的个数,可以自定义,不能大于8*/
#define X (x-100)/200

struct
{
 int y[N];          /*标志杆上各点的纵坐标*/
 int fa;            /*标志杆上方块的个数*/
 int fb[N];         /*标志杆上当前位置方块的宽度*/
}stick[3];

void drawintro(int x,int color) /*绘制箭头*/
{
 setcolor(color);
 line(x,20,x,40);
 line(x-3,40,x+3,40);line(x+3,40,x,49);line(x,49,x-3,40);
 setfillstyle(SOLID_FILL,color);
 floodfill(x,45,color);
 }
void drawblock(int x,int y,int w,int color) /*绘制方块*/
{
 setcolor(color);
 rectangle(x-10*w,y-9,x+10*w,y+9);
 setfillstyle(SOLID_FILL,color);
 floodfill(x-5,y,color);
 floodfill(x+5,y,color);       /*这种填充方式太恶心人了*/
 }
void _line(int x,int y,int color)   /*绘制消除方块后的线*/
{
 setcolor(color);
 line(x,y-9,x,y+9);
 }


main()
{
 int gd=DETECT,gm,i,x,key=0,f=0;
 initgraph(&gd,&gm,"");
 setbkcolor(2);
 setcolor(1);
 line(100,70,100,241);
 line(300,70,300,400);
 line(500,70,500,400);
 settextstyle(0,0,4);
 outtextxy(10,410,"Hanoi");
 drawintro(x=100,4);
 stick[0].fa=N;
 stick[1].fa=stick[2].fa=0;
 for(i=0;i  {
   stick[0].fb[i]=i+1;
   stick[1].fb[i]=stick[2].fb[i]=0;
   stick[0].y[i]=stick[1].y[i]=stick[2].y[i]=250+19*i;
   drawblock(x,stick[0].y[i],stick[0].fb[i],1);
   }
  setcolor(0);
  line(x,241,x,259+19*(i-1));
  setcolor(1);
  line(x,260+19*(i-1),x,400);
 while(key!=0x11b)
 {
  key=(bioskey(0));
  if(key==0x4b00&&x!=100)
  {
   drawintro(x,0);
   drawintro(x-200,

热门栏目