/***********************************************************************
* HANOI TOWER V2.0 *
* TURBO C 2.0 COMPILER *
* SOURCE PROGRAM *
* MADE BY BOLMAN *
* chencheng@vip.citiz.net*
***********************************************************************/
#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," BOLM@ETANG.COM ");
}
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,"-BOLM@ETANG.COM--BOLMAN@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;