//𨾹C : ~Tower Defense~ A popular TD game for gvmaker.
//Copyright (C) 2008  KumaYu
#define TileSize 20
#define DOWN  0
#define LEFT  1
#define UP    2
#define RIGHT 3
#define DELAY_TIME 0    //(PC delay150~300)    
#define BLACK 0                 
//Tile
char Map[16][10];    
char MapA1000[10][16]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                       0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,
                       1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,
                       1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,
                       1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,
                       1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,
                       1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,
                       1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,                       
                       1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,
                       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1                      
                       };   
//ENEMY
char EnemysType [21];       
int  EnemysLife [21];              
char EnemysSpeed[21];       //ĭxʳt
int  EnemysDir  [21];       //Current Direction0~3
int  EnemysXpos [21];
int  EnemysYpos [21];
int  EnemysTileX[21];
int  EnemysTileY[21];
int  EnemysBonus[21];
char EnemysState[21];       //A0=` 1=Q 2=B(t) 3=ۤ(ˮ`) 4=
//TOWER
char TowerType [25];        //0~5
char TowerLv   [25];        //0~5
char TowerExp  [25];        //0~100 
char TowerDir  [25];        //Current Direction0~7  KV
char TowerPower[25];        //O
char TowerFire [25];        //Ѿlog
char TowerShot [25];        //b}
char TowerRange[25];        //Z
int  TowerXpos [25];
int  TowerYpos [25];
char TowerFireIterval[25];     //j

int  Wave;             //ĤHi
int  WaveNum;          //o@iƶq
char TowerNum;         //Towerƶq
int  MyLife;           //q
long MyMoney;          //
int  SelectXpos,SelectYpos;
char TowerBuild;       //nسy
char SelectTower;      //ثe쪺s
char SelectMap;
int  Key;
char StageEnd;
char frame;
char GameEnd;
char Timer;
long EnemyHP;
long sum;
char EndPos[2];
char StPos[2];
//============禡C=============//
void InitGame();
void InitialMap();
void InitialEnemy();
void MoveEnemy();
void DrawMap();
void DrawEnemy();    //ĤHeX
void EnemyMoveDOWN(int i);
void EnemyMoveLEFT(int i);
void EnemyMoveUP(int i);
void EnemyMoveRIGHT(int i);
void NextWave(); 
void DrawSelect(); 
void DrawTower();       //⯥eX
void AttackGun();       //
void TowerGun(); 
void Upgrade();
void TowerFireUP();
void MoveSelect();
void DrawInfo();
//=================================//

void main()
{   
    InitGame();
    SetBkMode(0);
    SetFgColor(65504);
    SetBkColor(33808);  
    
    SetLCDMode(1);
    InitialMap();  
    DrawMap();      //aϵeX
    while(GameEnd)
    {
        InitialEnemy();  
        StageEnd=1;
        while(StageEnd)
        {
      
            DrawMap();      //aϵeX
            DrawEnemy();    //ĤHeX
            DrawTower();    //⯥eX
            DrawSelect();   //صeX
            DrawInfo();     //TeX                          
                     
              
            Key=Inkey();
            ReleaseKey(128);
                 
            MoveSelect();
            TowerGun();
            Upgrade();

            if (Timer>0 && TowerNum>0) { Timer=Timer-1;}
            if (Timer<=0)
            {  
               MoveEnemy();      //ĤH 
               AttackGun();      //  
               TowerFireUP();                
            }    
                
            Delay(DELAY_TIME);
                           
            if (MyLife<0)
            {   GameEnd=0;
                StageEnd=0; 
            }
            else
            {   NextWave(); }
        } //while(StageEnd)
        
        if (MyLife>=1)
        {
            if (WaveNum<19)
            {  WaveNum = WaveNum+1; }
            Wave = Wave+1;    
            StageEnd=1;
            Timer=60;
        }      
    }//while(GameEnd)
}
//=============禡wq=============//
void InitialMap()
{   int i,j;
    int temp;

    EndPos[0]=15; EndPos[1]=5; 
    StPos[0]=0;  StPos[1]=0; 

    for (j=0 ; j<10 ; j++)
    {   for (i=0 ; i<16 ; i++)
        {    Map[i][j]=MapA1000[j][i];
             if (Map[i][j]==1) {Map[i][j]=255;} 
        } 
    }

    for (j=0 ; j<10 ; j++)
    {   for (i=0 ; i<16 ; i++)
        {   temp=Map[i][j];
            if (temp==255) { temp=1;}
            DigitOut(i*20,j*20,temp); 
        }  
    }    
    getchar();
}

void InitialEnemy()
{   int i,scale;
    long HP1;
         HP1=0;  
    scale = Wave>>2; 
    HP1=100+Wave*Wave*scale;    
    EnemyHP=HP1;    
        for (i=0; i<WaveNum ; i++)
        {
            EnemysLife [i]=HP1;
            EnemysSpeed[i]=2;
            EnemysDir[i]  =DOWN;
            EnemysTileX[i]=StPos[0];
            EnemysTileY[i]=StPos[1] -1-i;
            EnemysXpos[i] = StPos[0]*20;
            EnemysYpos[i] = StPos[1]*20 -20 -i*20;
            EnemysBonus[i]=10+Wave;
            EnemysState[i]=0;
        }
}

void MoveEnemy()    
{   
    int i;
    for (i=0; i<WaveNum; i++)  
    {   if (EnemysLife[i]>0)   
        {   
            if (EnemysDir[i]==DOWN)  
            {      EnemyMoveDOWN(i);   }
            else if (EnemysDir[i]==LEFT) //======pĭxib
            {    EnemyMoveLEFT(i);} 
            else if (EnemysDir[i]==UP)   //W======pĭxibW
            {    EnemyMoveUP(i);                 }
            else if (EnemysDir[i]==RIGHT)//k======pĭxibk,
            {     EnemyMoveRIGHT(i);               } 
            
            if (EnemysTileX[i]==EndPos[0] && EnemysTileY[i]==EndPos[1])
            {    EnemysXpos[i]=EnemysXpos[i]+EnemysSpeed[i];   }
            
            if (EnemysXpos[i]>=320 )
            {   EnemysLife[i]=0; 
                MyLife=MyLife-1;
            }
            EnemysState[i]= 0; 
        }     
    }//forjBzҦĭx 
}

void DrawMap()
{   ShowImage(TDMap1,0,0,320,240,0,0,0,0);  }

void DrawEnemy()    //ĤHeX
{   int i;
    for (i=WaveNum; i>=0; i--)  //BzҦĭx
    {   if (EnemysLife[i]>0 && EnemysYpos[i]>=0 )   //pĭxi٬
        {     ShowImage(Enemy, EnemysXpos[i],EnemysYpos[i], 18,18, 1,1, 1,BLACK); }
    } 
}

void EnemyMoveDOWN(int i)
{   int NextPos;
        NextPos = EnemysTileY[i]+1;
    
    //pU@TileO,BO==========//
    if ( Map[EnemysTileX[i]][NextPos]==0 && NextPos <=9 )
    {   
         if (EnemysState[i]==2)
         {   EnemysYpos[i] = EnemysYpos[i] + (EnemysSpeed[i]/2);  }
         else
         {   EnemysYpos[i] = EnemysYpos[i] + EnemysSpeed[i];  }       
       
         //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.  
         if ( EnemysYpos[i] >= NextPos * TileSize )
         {    
              EnemysTileY[i] = NextPos;
              EnemysYpos[i] = EnemysTileY[i] * TileSize;  
         }
    }        
    else if ( Map[NextPos]!=0)  //pU@TileO. 
    {   //pk䪺TileOBO,k,sɲʳt״b 
        if  ( Map[ EnemysTileX[i]+1 ][EnemysTileY[i]]==0 && (EnemysTileX[i]+1)<=15 )
        {
             if (EnemysState[i]==2)
             {   EnemysXpos[i]=EnemysXpos[i]+EnemysSpeed[i]/2;  }   //ĭxks
             else
             {   EnemysXpos[i] = EnemysXpos[i] + EnemysSpeed[i];  }               
             EnemysDir[i]=RIGHT; 

             //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
             if ( EnemysXpos[i] >= (EnemysTileX[i]+1) * TileSize )
             {
                  EnemysTileX[i] = EnemysTileX[i]+1;
                  EnemysXpos[i] = EnemysTileX[i] * TileSize;
             }
        }
        //p䪺TileOBO,, sɲʳt״b 
        else if ( Map[ EnemysTileX[i]-1 ][EnemysTileY[i]]==0 && (EnemysTileX[i]-1)>=0 )
        {
             if (EnemysState[i]==2)
             {   EnemysXpos[i]=EnemysXpos[i]- EnemysSpeed[i]/2;  }  //ĭxs
             else
             {   EnemysXpos[i] = EnemysXpos[i] - EnemysSpeed[i];  }   
             
             EnemysDir[i]=LEFT;
             //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
             if ( EnemysXpos[i] <= (EnemysTileX[i]-1) * TileSize )
             {
                  EnemysTileX[i] = EnemysTileX[i]- 1;
                  EnemysXpos[i] = EnemysTileX[i] * TileSize;
             }
        }
    } 
}

void EnemyMoveLEFT(int i)
{   
    int NextPos;
        NextPos = EnemysTileX[i]-1;    
    //p@TileO,BO==========//    
    if  (Map[NextPos][EnemysTileY[i]]==0 && NextPos >=0 )
    {
        if (EnemysState[i]==2)
        {   EnemysXpos[i] = EnemysXpos[i]- EnemysSpeed[i]/2; }  //ĭx
        else
        {   EnemysXpos[i] = EnemysXpos[i]- EnemysSpeed[i]; } 
        
        //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
        if ( EnemysXpos[i] <= NextPos * TileSize )
        {
            EnemysTileX[i] = NextPos;
            EnemysXpos[i] = EnemysTileX[i] * TileSize;
        }
    }
    //p@Tile "" O , "O"
    else if (Map[NextPos][EnemysTileY[i]]!=0 || NextPos <0 )
    {  
        //pUTileOBO,U,sɲʳt״b 
        if  ( Map[EnemysTileX[i]][ EnemysTileY[i]+1 ]==0 && (EnemysTileY[i]+1)<=9 )
        {
            if (EnemysState[i]==2)
            {   EnemysYpos[i] =  EnemysYpos[i] +EnemysSpeed[i]/2;  } //ĭxU
            else
            {   EnemysYpos[i] =  EnemysYpos[i] +EnemysSpeed[i];  } 
            
            EnemysDir[i]=DOWN;
            //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
            if ( EnemysYpos[i] >= (EnemysTileY[i]+1) * TileSize )
            {
                EnemysTileY[i] = EnemysTileY[i]+1;
                EnemysYpos[i] = EnemysTileY[i] * TileSize;
            }
        }
        //pWTileOBO,W, sɲʳt״b 
        else if ( Map[EnemysTileX[i]][ EnemysTileY[i]-1 ]==0 && (EnemysTileY[i]-1)>=0 )
        {
            if (EnemysState[i]==2)
            {   EnemysYpos[i]= EnemysYpos[i] -EnemysSpeed[i]/2; }  //ĭxW
            else
            {   EnemysYpos[i] =  EnemysYpos[i] -EnemysSpeed[i];  } 
            
            EnemysDir[i]=UP;
            //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
            if ( EnemysYpos[i] <= (EnemysTileY[i]-1) * TileSize )
            {
                EnemysTileY[i] = EnemysTileY[i]-1;
                EnemysYpos[i] = EnemysTileY[i] * TileSize;
            }
        }
    }    
}

void EnemyMoveUP(int i)
{
    int NextPos;
    NextPos = EnemysTileY[i]-1;  
    //pW@Tile"O".BO==========//        
    if (Map[EnemysTileX[i]][NextPos]==0 && NextPos>=0 )
    {    
        if (EnemysState[i]==2)
        {   EnemysYpos[i] = EnemysYpos[i] - EnemysSpeed[i]/2; }  //ĭxW
        else
        {   EnemysYpos[i] = EnemysYpos[i] - EnemysSpeed[i]; } 
          
        //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
        
        if ( EnemysYpos[i] <= NextPos * TileSize )
        {
            EnemysTileY[i] = NextPos;
            EnemysYpos[i] = EnemysTileY[i] * TileSize;
        }
    }
    //pW@Tile""O  ΩW@TileO
    else if(Map[EnemysTileX[i]][NextPos]!=0 || NextPos <0 )
    {  
        //p䪺TileOBO,, sɲʳt״b 
        if( Map[ EnemysTileX[i]-1 ][EnemysTileY[i]]==0  && (EnemysTileX[i]-1)>=0 )
        {
            if (EnemysState[i]==2)
            {   EnemysXpos[i]= EnemysXpos[i]- EnemysSpeed[i]/2;  }
            else
            {   EnemysXpos[i]= EnemysXpos[i]- EnemysSpeed[i];  }
            
            EnemysDir[i]=LEFT;  
            
            if( EnemysXpos[i] <= (EnemysTileX[i]-1)  * TileSize  )  
            {   //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
                EnemysTileX[i] = EnemysTileX[i]-1;
                EnemysXpos[i] = EnemysTileX[i] * TileSize;
            }
        }
        //pk䪺TileOBO,k,sɲʳt״b 
        else if ( Map[ EnemysTileX[i]+1 ][EnemysTileY[i]]==0 && (EnemysTileX[i]+1)<=15 )
        {
            if (EnemysState[i]==2)
            {   EnemysXpos[i] = EnemysXpos[i]+ EnemysSpeed[i]/2; }  //ĭxks
            else
            {   EnemysXpos[i] = EnemysXpos[i]+ EnemysSpeed[i]; } 
            
            EnemysDir[i]=RIGHT;
            //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
            if ( EnemysXpos[i] >= (EnemysTileX[i]+1) * TileSize )
            {
                EnemysTileX[i] =   EnemysTileX[i]+1;
                EnemysXpos[i] = EnemysTileX[i] * TileSize;
            }
        } 
    }
}

void EnemyMoveRIGHT(int i)
{
    int NextPos;
        NextPos = EnemysTileX[i]+1;   
    //pk@TileO,BO==========//
    if (Map[NextPos][EnemysTileY[i]]==0 && NextPos <=15 )
    {
        if (EnemysState[i]==2)
        {   EnemysXpos[i] = EnemysXpos[i] +EnemysSpeed[i]/2; }  //ĭxk
        else
        {   EnemysXpos[i] = EnemysXpos[i] +EnemysSpeed[i]; }
        
        //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
        if ( EnemysXpos[i] >= NextPos * TileSize )
        {
            EnemysTileX[i] = NextPos;
            EnemysXpos[i] = EnemysTileX[i] * TileSize;
        }
    } 
    //pk@Tile "" O
    else if (Map[NextPos][EnemysTileY[i]]!=0 || NextPos >15 )
    {  
        //pWTileOBO,W, sɲʳt״b 
        if ( Map[EnemysTileX[i]][ EnemysTileY[i]-1 ]==0 && (EnemysTileY[i]-1)>=0 )
        {
            if (EnemysState[i]==2)
            {   EnemysYpos[i] = EnemysYpos[i]- EnemysSpeed[i]/2; }  
            else
            {   EnemysYpos[i] = EnemysYpos[i]- EnemysSpeed[i]; }
            
            EnemysDir[i]=UP;
            if ( EnemysYpos[i] <= (EnemysTileY[i]-1) * TileSize )
            {
                 EnemysTileY[i] =  EnemysTileY[i]- 1;
                 EnemysYpos[i] = EnemysTileY[i] * TileSize;
            }
        }
        //pUTileOBO,U,sɲʳt״b 
        else if  ( Map[EnemysTileX[i]][ EnemysTileY[i]+1 ]==0 && (EnemysTileY[i]+1)<=9 )
        {
            if (EnemysState[i]==2)
            {   EnemysYpos[i]=EnemysYpos[i]+EnemysSpeed[i]/2; }  //ĭxUs
            else
            {   EnemysYpos[i]=EnemysYpos[i]+EnemysSpeed[i]; }
            
            EnemysDir[i]=DOWN;
            //pʫ᪺yжWLU@Tiley, U@Tile]ثeTile.
            if ( EnemysYpos[i] >= (EnemysTileY[i]+1) * TileSize )
            {
                EnemysTileY[i] = EnemysTileY[i]+1;
                EnemysYpos[i] = EnemysTileY[i] * TileSize;
            }
        }
    } 
}

void DrawSelect()
{    ShowImage(Info,SelectXpos,SelectYpos,20,20, 0,0,1 ,BLACK);}

void DrawTower()    //⯥eX
{  char i;
   char type;
       if (TowerNum>0)
       {
           for (i=1; i<=TowerNum; i++ )
           {
               type=TowerType[i];
               if (type==1)
               {   ShowImage(Tower,TowerXpos[i],TowerYpos[i],20,20, TowerDir[i]*20,0,  1 ,BLACK); 
                   if (TowerShot[i]==1)  
                   {   TowerShot[i]=0;  }     
               }        
           
               //Draw Lv 
               if (TowerLv[i]>0)
               {       ShowImage(Info,TowerXpos[i],TowerYpos[i],20,20, (TowerLv[i]-1)*20,20,1 ,BLACK);  }               
           }
       }
       if (TowerNum>0 && SelectTower!=0)   //DrawRange
       {   for (i=1; i<=TowerNum; i++ )
           {    if (SelectTower==i ) 
                {  Circle(TowerXpos[i]+10,TowerYpos[i]+10,TowerRange[i]-5,0); } 
           }   //Attack Range
       }       
}

void Upgrade()
{   char temp;
        temp=Map[SelectXpos/20][SelectYpos/20];
    if (Key==KEY_U && temp>=1  && temp!=255  && TowerType[temp]==1)  //Gun Tower
    { 
        if (MyMoney>=100 && TowerLv[temp]<1)
        { 
            TowerLv[temp]=TowerLv[temp]+1;       //0~5
            TowerRange[temp]=TowerRange[temp]+20;       // 
            TowerPower[temp]=TowerPower[temp]+4;                     
            MyMoney= MyMoney-100;
        } 
        else if (MyMoney>=200 && TowerLv[temp]<2)
        { 
            TowerLv[temp]=TowerLv[temp]+1;       //0~5
            TowerRange[temp]=TowerRange[temp]+20;       //
            TowerPower[temp]=TowerPower[temp]+4;                     
            MyMoney= MyMoney-200;
        }         
        else if (MyMoney>=400 && TowerLv[temp]<3)
        { 
            TowerLv[temp]=TowerLv[temp]+1;       //0~5
            TowerRange[temp]=TowerRange[temp]+20;       //
            TowerPower[temp]=TowerPower[temp]+4;                    
            MyMoney= MyMoney-400;
        }   
        else if (MyMoney>=700 && TowerLv[temp]<4)
        { 
            TowerLv[temp]=TowerLv[temp]+1;       //0~5
            TowerRange[temp]=TowerRange[temp]+20;       // 
            TowerPower[temp]=TowerPower[temp]+4;                   
            MyMoney= MyMoney-700;
        }   
        SelectTower = temp;
    }
}

void TowerGun()
{
    if (Key==KEY_ENTER && Map[SelectXpos/20][SelectYpos/20]==255)
    {   
        if (MyMoney>=100 && TowerBuild==1 && TowerNum<24)
        {
            TowerNum=TowerNum+1;
                
            TowerType[TowerNum]=1;     //1=j GunTower
            TowerLv[TowerNum]=0;       //0~5
            TowerExp[TowerNum]=0;      //0~100
            TowerDir[TowerNum]=0;      //Current Direction0~7  KV
            TowerRange[TowerNum]=45;       //
            TowerFire[TowerNum]=1;                      

            TowerXpos[TowerNum]= SelectXpos;
            TowerYpos[TowerNum]= SelectYpos;
            TowerPower[TowerNum]=4;
            TowerFireIterval[TowerNum]=0;
            MyMoney= MyMoney-100;
                    
            Map[SelectXpos/20][SelectYpos/20]=TowerNum;
            SelectTower=TowerNum;
        } 
    }
}

void SetTower()
{
    if (Key==KEY_ENTER && Map[SelectXpos/20][SelectYpos/20]!=255)
    {   SelectTower = Map[SelectXpos/20][SelectYpos/20]; }   
}

void AttackGun()
{   int i,j;
    int x,y,z;
    int ExpFrame;
        ExpFrame=0;
    if (TowerNum>0)
    {  
        for (i=0; i<WaveNum; i++)  //BzҦĭx
        {    
            for (j=1; j<=TowerNum; j++)  //BzҦTower
            {
                if (EnemysLife[i]>0 && EnemysYpos[i]>=0 && TowerType[j]==1 )   //pĭxi٬
                {               
                    if     (EnemysXpos[i] >= TowerXpos[j])
                    {   x=  EnemysXpos[i] - (TowerXpos[j]);}
                    else if (EnemysXpos[i]< TowerXpos[j])
                    {   x=  TowerXpos[j]  - EnemysXpos[i];}
                
                    if     (EnemysYpos[i] >= TowerYpos[j])
                    {   y= EnemysYpos[i] - TowerYpos[j];}
                    else if (EnemysYpos[i] < TowerYpos[j])
                    {   y=  TowerYpos[j] - EnemysYpos[i];}
                    z=TowerRange[j];
                    
                    if ( x*x + y*y <= z*z && TowerFire[j]>0 && TowerFireIterval[j]==0 )
                    {   
                        EnemysLife[i]= EnemysLife[i]-TowerPower[j];
                        TowerFire[j]=0;
                        TowerFireIterval[j]=4;
                        
                        if (EnemysLife[i]<=0)
                        {  
                            MyMoney = MyMoney + EnemysBonus[i]; 
                            if (TowerExp[j]<50) { TowerExp[j] = TowerExp[j]+1; }
                            EnemysLife[i]=0;
                            
                            if (TowerExp[j]==50 && TowerLv[j]<4) 
                            {   TowerLv[j]=TowerLv[j]+1;
                                TowerRange[j]=TowerRange[j]+20;       // 
                                TowerPower[j]=TowerPower[j]+4;                               
                                TowerExp[j]=0;
                            }
                        }

                        Line(EnemysXpos[i],EnemysYpos[i],TowerXpos[j]+10,TowerYpos[j]+10);
                        TowerShot[j]=1;
                    }
                }
            }
        } 
    }
 
    for (j=1; j<=TowerNum; j++)  //BzҦGUN Tower
    {    
        if (TowerType[j]==1 && TowerFireIterval[j]>0)
        {  TowerFireIterval[j]= TowerFireIterval[j]-1; }
    }
}

void TowerFireUP()
{   int j;
    if (TowerNum>0)
    {   for (j=1; j<=TowerNum; j++)
        {   TowerFire[j]=1;   }
    }
}

void MoveSelect()
{
   if (Key==KEY_UP && SelectYpos>0)
   {   SelectYpos=SelectYpos-20;}
   if (Key==KEY_DOWN && SelectYpos<180)
   {   SelectYpos=SelectYpos+20;}
   if (Key==KEY_LEFT && SelectXpos>0)
   {   SelectXpos=SelectXpos-20;}
   if (Key==KEY_RIGHT && SelectXpos<300)
   {   SelectXpos=SelectXpos+20;}
}

void NextWave()
{   int i; 
    sum=0;
    for (i=0;i<WaveNum; i++)
    {   sum=sum+EnemysLife[i];     
        if (sum>20000) {  sum=1;}
        if (sum<-20000) {  sum=0;}
    }
    if (sum<=0)
    {   StageEnd=0;   }
} 

void DrawInfo()
{     
    ShowImage(TDMap1,0,200,320,40, 0 ,200,  0 ,0);  

    SetFgColor(33808); 
    TextOut(  0,200,"Stage   ");
    TextOut(  0,213,"Timer   ");  
    TextOut( 60,200," Gold     ");
    TextOut( 60,216," Life     ");
    TextOut(224,216,"EnemyHP     ");
        
    SetFgColor(65504);
    DigitOut( 40,200,Wave);    DigitOut( 40,213,Timer);     
    DigitOut(105,200,MyMoney);    DigitOut(105,216,MyLife);                              
    DigitOut(283,216,EnemyHP);       
}

void InitGame()
{  int i;
   Wave=1;            //ĤHi
   WaveNum=6;          //o@iƶq
   TowerNum=0;         //Towerƶq
   MyLife=20;          //
   MyMoney=300;        //
   SelectXpos=140;
   SelectYpos=80;
   TowerBuild=1;       //nسy
   SelectTower=0;      //ثe쪺s
   SelectMap=1;
   Key=0;
   StageEnd=0;
   GameEnd=1;
   Timer=100;
   frame=0;
   for (i=0; i<20;i++)
   {   EnemysLife [i]=0;  }
}