汉诺塔经典DOS版TC源码

/***********************************************************************
*                            HANOI TOWER V2.0                          *
*                          TURBO C 2.0 COMPILER                        *
*                             SOURCE PROGRAM                           *
*                             MADE BY BOLMAN                           *
*                             [email protected]*
***********************************************************************/
#include  "stdio.h"
#include  "conio.h"
#include  "stdlib.h"
#include  "dos.h"
#include  "time.h"
#include  "graphics.h"

#define S   setcolor
#define F   setfillstyle
#define R   rectangle
#define C   circle
#define B   bar
#define B3D bar3d
#define L   line
#define O   outtextxy

#define X 200
#define Y 20


int nStep=0;
int nRecord[7]={7,15,31,63,127,255,511},nRec;
int nDisk,nDisknum;
int nBaseNum;
int nSelectDelay=1; /**USE IN AUTOPLAY**/
float nDelay;
char chMark[15];

struct rod
       {
       int nDisk[10][5];
       int nDiskName[10];
       }tree[3];

/********************************************/
ntoa(int s)
{
 int b[15];
 int i,j;
 for (i=0;i<15;i++)
   chMark[i]='/0';
 for (i=0;s>=10;i++)
   {b[i]=s%10;
   s/=10;}
 b[i]=s;
 for(j=i;j>=0;j--)
   chMark[i-j]=b[j]+'0';
}


void INITIAL()     /**GAME INITIAL**/
{
 int gd=DETECT,gm=0;
 registerbgidriver(EGAVGA_driver);
 initgraph(&gd,&gm,"");
 setbkcolor(0);
}

void Start_Logo()
{
  F(1,8);
  B(200,150,439,329);
  S(7);
  R(201,151,438,328);
  S(WHITE);
  R(199,149,440,330);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
  O(233,180,"HANOI TOWER");
  S(1);
  O(232,179,"HANOI TOWER");
  S(WHITE);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
  O(284,204,"V 2.0");
  S(1);
  O(283,203,"V 2.0");
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  S(WHITE);
  O(236,240,"COPYRIGHT (C) 2002 BY");
  O(236,250,"--LING DONG  STUDIO--");
  S(7);
  O(236,280,"    [email protected]   ");
}

void END()
{
 char message[110]=">>> IF YOU WANT TO GET THE SOURCE PROGRAM/n/nPLEASE SEND AN E_MAIL TO TELL ME,AND I WILL SEND TO YOU!! ^-^";
 int NUM;
 closegraph();
 sleep(1);
 gotoxy(1,10);
 for(NUM=0;NUM<110;NUM++)
  {printf("%c",message[NUM]);
   delay(500);
   sound(0);delay(50);nosound();}
  sleep(1);
}


void FLASH_REC()
{
 int NUM,x1=8,x2=10;
 randomize();
 for(NUM=0;NUM<33;NUM++)
 {
  F(1,rand()%16);
  B(x1,412,x2,414);
  x1=x1+20;
  x2=x2+20;
 }
}

void DRAW()
{
 F(1,8);
 B(6,80,633,100); /**BROWN BAR**/
 B(6,415,633,430);
 B(6,430,633,479);
 F(1,7);
 B(6,77,633,80);
 B(6,430,633,432);
 F(1,4);
 B(6,100,633,102);
 B(6,410,633,415);
 F(1,7);                 /**GAME BACKGROUND**/
 B(7,102,632,410);
 S(15);
 R(6,0,633,479);
 S(15);
 settextstyle(DEFAULT_FONT,HORIZ_DIR,4);
 O(70,30,"HANOI TOWER V2.0");
 S(9);
 O(71,31,"HANOI TOWER V2.0");

 S(7);            /**SHOW MESSAGE**/
 settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
 O(190,440,"-MADE BY BOLMAN--LINGDONG STUDIO-");
 O(190,450,"[email protected]@SINA.COM-");
 L(165,419,165,425);
 S(12);
 O(170,419,"MESSAGE:"); /**MESSAGE BOX**/
 S(7);
 O(20,419,"PRESS ESC TO QUIT");
 F(1,2);
 B(550,450,560,460);
 F(1,13);
 B(565,450,575,460);
 F(1,YELLOW);
 B(580,450,590,460);
 F(1,12);
 B(595,450,605,460);
}

void DrawRod()
{
 F(1,8);
 B(118,150,122,400);   /*ROD1*/
 B(318,150,322,400);   /*ROD2*/
 B(518,150,522,400);   /*ROD3*/
 F(6,LIGHTBLUE);
 B(119,151,123,401);
 B(319,151,323,401);
 B(519,151,522,401);
}
/*====END OF FUN DRAWROD====*/

void ShowInfo(int nRn,int nWhetherGetDisk)
{
 F(1,8);
 B(230,418,620,428);
 settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
 S(CYAN);
 if(nRn==0&&nWhetherGetDisk==0)
   O(235,419,"YOU NOW AT THE FIRST ROD");
 else if(nRn==1&&nWhetherGetDisk==0)
   O(235,419,"YOU NOW AT THE SECOND ROD");
 else if(nRn==2&&nWhetherGetDisk==0)
   O(235,419,"YOU NOW AT THE THIRD ROD");
 else if(nWhetherGetDisk==1)
   {S(YELLOW);
     switch(nRn)
      {case 0 :O(235,419,"YOU GET THE TOP DISK AT THE FIRST ROD");break;
       case 1 :O(235,419,"YOU GET THE TOP DISK AT THE SECOND ROD");break;
       case 2 :O(235,419,"YOU GET THE TOP DISK AT THE THIRD ROD");break;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值