⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc

📁 内部有说明,多为嵌入式系统程序,侧重于实用的系统,很有参考价值
💻
📖 第 1 页 / 共 2 页
字号:
TC下的俄罗斯方块原代码 
    
 
  /*TC下的俄罗斯方块原代码 */
  
  
/* 使用环形链表构造方块,编译前将turboc目录下的egavga.bgi考到源程序所在目录下。*/  
 

 

/*************************  
<Russia  Diamonds  Ver  1.0>  
Copyright  by  forever_chang  
forever_chang@china.com  
2001.11.1  
*************************/  
/*****************************************************************************************/  
#include  "graphics.h"  /*头文件*/  
#include  "time.h"  
#include  "stdlib.h"  
#include  "bios.h"  
#include  "dos.h"  
#include  "stdio.h"  
#define  ESC  0x11b  /*键盘扫描码*/  
#define  UP  0x4800  
#define  DOWN  0x5000  
#define  LEFT  0x4b00  
#define  F1  0x3b00  
#define  RIGHT  0x4d00  
#define  YES  0x1579  
#define  NO  0x316e  
#define  RESTART  0x1372  
/*****************************************************************************************/  
struct  diamond  /*记录每种方块每种状态的信息*/  
{  
int  x[4];  
int  y[4];  
int  start_x;  
int  start_y;  
int  color;  
struct  diamond  *next;  
};  
int  grid[12][23];  /*记录所有格子的状态  (0)没有方块  (1)有固定方块  (2)有活动方块*/  
int  x;  /*活动方块所在位置*/  
int  y;  
int  level;  /*游戏难度*/  
int  count;  /*计数器*/  
int  score;/*得分*/  
struct  diamond  *nowinfo;  /*当前活动方块*/  
struct  diamond  *nextinfo;  /*下一个方块*/  
int  color;/*画格子的颜色*/  
int  backcolor;/*游戏区域背景色*/  
/*****************************************************************************************/  
void  show_interface  (int  mode);/*显示游戏界面*/  
void  show_copsign  (int  topx,int  topy,int  size,int  color);/*显示公司标志--恒基伟业*/  
void  show_intro  (int  xs,int  ys);/*显示软件介绍区*/  
/*void  print();  测试用函数*/  
void  scandel();/*扫描所有格子看是否有可消除行*/  
void  show_down  ();/*方块下落后的下一个状态*/  
void  show_next  ();/*方块翻转后的下一个状态*/  
void  show_left  ();/*方块向左移动后的下一个状态*/  
void  show_right  ();/*方块向右移动后的下一个状态*/  
void  interrupt  (*oldtimer)();/*指向未安装前的中断向量,即函数指针,指向一段可执行的代码*/  
void  install();/*安装新的中断向量,即将中断服务程序安装到中断向量表中*/  
void  interrupt  newtimer();/*中断服务程序*/  
struct  diamond  *get_diamond();/*随机得到一个方块*/  
struct  diamond  *create_I();/*函数用来构造各种类形方块的环形链表*/  
struct  diamond  *create_T();/*返回链表中随机一个状态的指针*/  
struct  diamond  *create_L();  
struct  diamond  *create_J();  
struct  diamond  *create_Z();  
struct  diamond  *create_N();  
struct  diamond  *create_H();  
void  delinfo  (struct  diamond  *info);/*释放当前方块所占用的空间*/  
void  addtobuffer(int  c);/*向键盘缓冲区中增加一个DOWN*/  
/*void  clrkey();调用dos中断清空键盘缓冲区,未使用此方法.*/  
void  showsubwin(struct  diamond  *next);/*在小窗口显示下一个方块*/  
void  showscore(int  scoreget);/*显示分数*/  
void  startset();/*初始化游戏*/  
/*****************************************************************************************/  
main  ()  
{  
int  driver=VGA;  
int  mode=VGAHI;  
int  i;/*计数器*/  
int  j;  
int  key;/*记录键盘扫描码*/  
initgraph  (&driver,&mode,"");/*初始化*/  
color=8;  
backcolor=7;  
level=1;  
score=298;  
count=0;  
show_interface  (9);/*显示界面*/  
setfillstyle(SOLID_FILL,1);  
bar(0,465,640,480);  
outtextxy(5,469,"Press  any  key  to  start...");  
getch();  
setfillstyle(SOLID_FILL,9);  
bar(0,465,640,480);  
showscore(0);/*显示分数*/  
randomize();  
nowinfo=get_diamond  ();/*得到一个当前方块*/  
oldtimer=getvect(0x1c);  
install(newtimer);  
for(i=0;i<=21;i++)/*初始化grid[12][23]*/  
{  
 for(j=1;j<=10;j++)  
 grid[j]=0;  
}  
for(i=0;i<=22;i++)  
{  
 grid[0]=1;  
 grid[11]=1;  
}  
for(i=0;i<=11;i++)  
{  
 grid[22]=1;  
}  

x=nowinfo->start_x;/*初始化方块位置*/  
y=nowinfo->start_y;  
nextinfo=get_diamond  ();/*得到下一个方块*/  
showsubwin(nextinfo);  

for  (;  
{  
 key=bioskey(0);/*得到键盘扫描码*/  
 if  (key)  
 {  
   switch(key)  
   {  

case  DOWN:{  
         show_down  ();  
   break;  
    }  
case  UP:{  
     show_next  ();  
  break;  
   }  
case  LEFT:{  
      show_left();  
   break;  
    }  
case  RIGHT:{  
        show_right();  
     break;  
   }  
  case  RESTART:{  
      install(oldtimer);  
   setfillstyle(SOLID_FILL,1);  
      bar(0,465,640,480);  
      outtextxy(5,469,"Are  you  sure  to  restart  (Y/N)...");  
   for  (;  
   {  
          key=bioskey(0);/*得到键盘扫描码*/  
           if  (key==YES)  
     {  
          startset();  
    setfillstyle(SOLID_FILL,9);  
       bar(0,465,640,480);  
    break;  
     }  
           if  (key==NO)  
     {  
     setfillstyle(SOLID_FILL,9);  
     bar(0,465,640,480);  
     install(newtimer);  
     break;  
     }  
    }  
    break;  
  }  
/*  case  F1:{  
     print();  
  break;  
   }  
*/  
case  ESC:{  
    install(oldtimer);  
    setfillstyle(SOLID_FILL,1);  
    bar(0,465,640,480);  
    outtextxy(5,469,"Are  you  sure  to  exit  (Y/N)...");  
    for  (;  
    {  
        key=bioskey(0);/*得到键盘扫描码*/  
         if  (key==YES)  
   {  
  closegraph();  
     exit(0);  
   }  
         if  (key==NO)  
   {  
     setfillstyle(SOLID_FILL,9);  
     bar(0,465,640,480);  
  install(newtimer);  
  break;  
   }  
    }  
      
  }  
   }  
 }  
}  
}  
/*****************************************************************************************/  
struct  diamond  *get_diamond()  
{  
struct  diamond  *now;  
switch  (random(7)+1)  
{  
 case  1:{  
    now=create_I();  
    return  now;  
  }  
   case  2:{  
    now=create_T();  
    return  now;  
     }  
   case  3:{  
    now=create_L();  
    return  now;  
  }  
   case  4:{  
    now=create_J();  
    return  now;  
  }  
   case  5:{  
    now=create_Z();  
    return  now;  
  }  
   case  6:{  
    now=create_N();  
    return  now;  
  }  
   case  7:{  
    now=create_H();  
    return  now;  
  }  
}  
}  
/*****************************************************************************************/  
void  show_interface  (int  fill_mode)  
{  
int  i;  
setbkcolor  (9);  
setcolor  (color);  
setfillstyle  (SOLID_FILL,backcolor);  
bar  (100,60,300,420);  
bar  (360,60,440,140);  
rectangle  (100,60,300,420);  
rectangle  (96,56,304,424);  

rectangle  (360,60,440,140);  
rectangle  (356,56,444,144);  
setfillstyle  (fill_mode,14);  
floodfill  (97,57,color);  
floodfill  (397,57,color);  
setcolor(1);  
rectangle(96,56,304,424);  
setcolor  (color);  
for  (i=80;i<=400;i+=20)  
 {  
   line  (100,i,300,i);  
 }  
for  (i=120;i<=280;i+=20)  
 {  
   line  (i,60,i,420);  
 }  
for  (i=80;i<=120;i+=20)  
{  
 line  (360,i,440,i);  
}  
for  (i=380;i<=420;i+=20)  
{  
 line  (i,60,i,140);  
}  
show_intro  (360,180);  
show_copsign  (475,320,40,1);  
setfillstyle(SOLID_FILL,1);  
setcolor(14);  
rectangle(420,405,534,417);  
floodfill  (421,406,14);  
outtextxy(422,408,"HI-TECH  WEALTH");  
}  
/*****************************************************************************************/  
void  show_copsign  (int  topx,int  topy,int  size,int  color)  
{  
int  halfsize,qtrsize;  
int  xadd,xdel,yadd1,yadd2;  
halfsize=0.5*size;  
qtrsize=0.25*size;  

xadd=topx+size;  
xdel=topx-size;  
yadd1=topy+size;  
yadd2=topy+2*size;  

setcolor(color);  
line  (topx,topy,xdel,yadd1);  
line  (xdel,yadd1,topx,yadd2);  
line  (topx,yadd2,xadd,yadd1);  
line  (xadd,yadd1,topx,topy);  
rectangle  (topx-halfsize,topy+halfsize,topx+halfsize,yadd1+halfsize);  
setfillstyle  (SOLID_FILL,color);  
floodfill  (topx,topy+1,color);  
floodfill  (xdel+1,yadd1,color);  
floodfill  (topx,yadd2-1,color);  
floodfill  (xadd-1,yadd1,color);  
rectangle  (topx-halfsize,yadd1-qtrsize,topx-0.75*halfsize,yadd1+qtrsize);  
floodfill  (topx-halfsize+1,yadd1-qtrsize+1,color);  
rectangle  (topx-qtrsize,yadd1-halfsize,topx+qtrsize,yadd1-0.25*halfsize);  
floodfill  (topx-qtrsize+1,yadd1-halfsize+1,color);  
rectangle  (topx+0.75*halfsize,yadd1-qtrsize,topx+halfsize,yadd1+qtrsize);  
floodfill  (topx+0.75*halfsize+1,yadd1-qtrsize+1,color);  
rectangle  (topx-qtrsize,yadd1+0.25*halfsize,topx+qtrsize,yadd2-halfsize);  
floodfill  (topx-qtrsize+1,yadd1+0.25*halfsize+1,color);  
setcolor(14);  
line  (topx,topy-1,xdel-1,yadd1);  
line  (xdel-1,yadd1,topx,yadd2+1);  
line  (topx,yadd2+1,xadd+1,yadd1);  
line  (xadd+1,yadd1,topx,topy-1);  
setfillstyle  (SOLID_FILL,14);  
floodfill  (topx,yadd1,color);  
}  
/*****************************************************************************************/  
void  show_intro  (int  xs,int  ys)  
{  
char  stemp[20];  
setcolor  (15);  
rectangle(xs-3,ys-3,xs+239,ys+115);  
line  (xs-3,ys+26,xs+239,ys+26);  
line  (xs-3,ys+72,xs+239,ys+72);  
outtextxy(xs,ys,"Level:");  
outtextxy(xs,ys+15,"Score:");  
sprintf(stemp,"  -Roll -Downwards");  
stemp[0]=24;  
stemp[7]=25;  
outtextxy(xs,ys+30,"Help:");  
setcolor(14);  
outtextxy(xs+40,ys+30,stemp);  
outtextxy(xs+40,ys+45,"<-Turn  Left  >-Turn  Right");  
outtextxy(xs+40,ys+60,"Esc-Exit  R-Restart");  
outtextxy(xs,ys+75,"Russia  Diamonds  Ver  1.0");  
outtextxy(xs,ys+90,"CopyRight  By  ChangYong.01-11-1");  
outtextxy(xs,ys+105,"Email:forever_chang@163.com");  
}  
/*****************************************************************************************/  
struct  diamond  *create_I()  
{  
struct  diamond  *info;  
struct  diamond  *first;  
first=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
first->next=info;  
info->next=first;  
first->x[0]=0;  
first->y[0]=0;  
first->x[1]=-1;  
first->y[1]=0;  
first->x[2]=1;  
first->y[2]=0;  
first->x[3]=2;  
first->y[3]=0;  
first->start_x=5;  
first->start_y=3;  
first->color=2;  

info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=-1;  
info->x[2]=0;  
info->y[2]=1;  
info->x[3]=0;  
info->y[3]=2;  
info->start_x=5;  
info->start_y=1;  
info->color=2;  

if(random(2)==0)  {return  first;}  
 else  {return  first->next;}  
}  
/*****************************************************************************************/  
struct  diamond  *create_T()  
{  
struct  diamond  *info;  
struct  diamond  *first;  
struct  diamond  *last;  
int  i;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=-1;  
info->y[1]=0;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=1;  
info->y[3]=0;  
info->start_x=5;  
info->start_y=3;  
info->color=4;  
first=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=1;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=1;  
info->y[3]=0;  
info->start_x=5;  
info->start_y=2;  
info->color=4;  
last->next=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=-1;  
info->y[1]=0;  
info->x[2]=1;  
info->y[2]=0;  
info->x[3]=0;  
info->y[3]=1;  
info->start_x=5;  
info->start_y=2;  
info->color=4;  
last->next=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=1;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=-1;  
info->y[3]=0;  
info->start_x=5;  
info->start_y=2;  
info->color=4;  
last->next=info;  
last=info;  
last->next=first;  

for  (i=0;i<=random(4);i++)  
{  
 first=first->next;  
}  
return  first;  
}  
/*****************************************************************************************/  
struct  diamond  *create_L()  
{  
struct  diamond  *info;  
struct  diamond  *first;  
struct  diamond  *last;  
int  i;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=1;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=1;  
info->y[3]=1;  
info->start_x=5;  
info->start_y=2;  
info->color=5;  
first=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=-1;  
info->y[1]=0;  
info->x[2]=1;  
info->y[2]=0;  
info->x[3]=-1;  
info->y[3]=1;  
info->start_x=5;  
info->start_y=2;  
info->color=5;  
last->next=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=1;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=-1;  
info->y[3]=-1;  
info->start_x=5;  
info->start_y=2;  
info->color=5;  
last->next=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=-1;  
info->y[1]=0;  
info->x[2]=1;  
info->y[2]=0;  
info->x[3]=1;  
info->y[3]=-1;  
info->start_x=5;  
info->start_y=2;  
info->color=5;  
last->next=info;  
last=info;  
last->next=first;  

for  (i=0;i<=random(4);i++)  
{  
 first=first->next;  
}  
return  first;  
}  
/*****************************************************************************************/  
struct  diamond  *create_J()  
{  
struct  diamond  *info;  
struct  diamond  *first;  
struct  diamond  *last;  
int  i;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  
info->x[0]=0;  
info->y[0]=0;  
info->x[1]=0;  
info->y[1]=1;  
info->x[2]=0;  
info->y[2]=-1;  
info->x[3]=-1;  
info->y[3]=1;  
info->start_x=5;  
info->start_y=2;  
info->color=6;  
first=info;  
last=info;  

info=(struct  diamond  *)malloc(sizeof(struct  diamond));  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -