#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 (YN)...);
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 (YN)...);
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.5size;
qtrsize=0.25size;
xadd=topx+size;
xdel=topx-size;
yadd1=topy+size;
yadd2=topy+2size;
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.75halfsize,yadd1+qtrsize);
floodfill (topx-halfsize+1,yadd1-qtrsize+1,color);
rectangle (topx-qtrsize,yadd1-halfsize,topx+qtrsize,yadd1-0.25halfsize);
floodfill (topx-qtrsize+1,yadd1-halfsize+1,color);
rectangle (topx+0.75halfsize,yadd1-qtrsize,topx+halfsize,yadd1+qtrsize);
floodfill (topx+0.75halfsize+1,yadd1-qtrsize+1,color);
rectangle (topx-qtrsize,yadd1+0.25halfsize,topx+qtrsize,yadd2-halfsize);
floodfill (topx-qtrsize+1,yadd1+0.25halfsize+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 GZ clever boy);
outtextxy(xs,ys+105,Emaillihongx2007@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));
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=6;
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=6;
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=6;
last-next=info;
last=info;
last-next=first;
for (i=0;i=random(4);i++)
{
first=first-next;
}
return first;
}
struct diamond create_Z()
{
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]=0;
first-y[2]=1;
first-x[3]=1;
first-y[3]=1;
first-start_x=5;
first-start_y=2;
first-color=9;
info-x[0]=0;
info-y[0]=0;
info-x[1]=0;
info-y[1]=1;
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=9;
if(random(2)==0) {return first;}
else {return first-next;}
}
struct diamond create_N()
{
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]=0;
first-y[1]=1;
first-x[2]=-1;
first-y[2]=1;
first-x[3]=1;
first-y[3]=0;
first-start_x=5;
first-start_y=2;
first-color=14;
info-x[0]=0;
info-y[0]=0;
info-x[1]=0;
info-y[1]=-1;
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=14;
if(random(2)==0) {return first;}
else {return first-next;}
}
struct diamond create_H()
{
struct diamond first;
first=(struct diamond )malloc(sizeof(struct diamond));
first-next=first;
first-x[0]=0;
first-y[0]=0;
first-x[1]=0;
first-y[1]=1;
first-x[2]=1;
first-y[2]=0;
first-x[3]=1;
first-y[3]=1;
first-start_x=5;
first-start_y=2;
first-color=1;
return first;
}
void show_next ()
{
int nowx;记录当前每个格子的位置
int nowy;
int i;计数器
int j;
int haveit;当前格子是否已经显示
struct diamond next;当前方块的翻转后的下一个状态
next=nowinfo-next;
if (next==NULL) {gotoxy(1,1);printf(null);}
for (i=0;i=3;i++)判断是否能够翻转,若不能,就直接退出该函数
{
if (grid[x+next-x][y+next-y]==1)
{
return;
}
}
setfillstyle(SOLID_FILL,backcolor);设置背景色以消除不需要的格子
for (i=0;i=3;i++)
{
haveit=0;
for (j=0;j=3;j++)
{
if (next-x[j]==nowinfo-x&&next-y[j]==nowinfo-y) {haveit=1;break;}
}
if (haveit==0) 判断翻转后该格子是否显示,若不显示,将该格子设为背景色
{
grid[x+nowinfo-x][y+nowinfo-y]=0;
if (y+nowinfo-y=4)判断该格子是否到了可以显示的区域
floodfill(80+(nowinfo-x+x)20+1,-20+(nowinfo-y+y)20+1,color);
}
}
nowinfo=next;
nowx=x;
nowy=y;
setfillstyle(SOLID_FILL,nowinfo-color);设置填冲色为方块的颜色
for (i=0;i=3;i++)
{
if (grid[x+nowinfo-x][y+nowinfo-y]!=2)如果该格子还没有被显示
{
nowx=x+nowinfo-x;
nowy=y+nowinfo-y;
if (y+nowinfo-y=4)
floodfill(80+nowx20+1,-20+nowy20+1,color);
grid[nowx][nowy]=2; 设置该格子当前有活动方块
}
}
return;
}
void show_left ()
{
int i;计数器
int j;
int haveit;当前格子是否已经显示
int nowx;记录当前每个格子的位置
int nowy;
for (i=0;i=3;i++)判断是否可以向左移动
{
if (grid[x-1+nowinfo-x][y+nowinfo-y]==1)
{
return;
}
}
setfillstyle(SOLID_FILL,backcolor);设置背景色以消除不需要的格子
for (i=0;i=3;i++)
{
haveit=0;
for (j=0;j=3;j++)
{
if (nowinfo-x==nowinfo-x[j]-1&&nowinfo-y==nowinfo-y[j]) {haveit=1;break;}
}
if (haveit==0) 判断翻转后该格子是否显示,若不显示,将该格子设为背景色
{
grid[x+nowinfo-x][y+nowinfo-y]=0;
if (y+nowinfo-y=4)判断该格子是否到了可以显示的区域
floodfill(80+(nowinfo-x+x)20+1,-20+(nowinfo-y+y)20+1,color);
}
}
setfillstyle(SOLID_FILL,nowinfo-color);设置填冲色为方块的颜色
for (i=0;i=3;i++)
{
nowx=x+nowinfo-x-1;
nowy=y+nowinfo-y;
if (grid[nowx][nowy]!=2)如果该格子还没有被显示
{
if (nowy=4)
floodfill(80+nowx20+1,-20+nowy20+1,color);
grid[nowx][nowy]=2;
}
}
x=x-1;
return;
}
void show_right ()
{
int i;计数器
int j;
int haveit;当前格子是否已经显示
int nowx;记录当前每个格子的位置
int nowy;
for (i=0;i=3;i++)
{
if (grid[x+1+nowinfo-x][y+nowinfo-y]==1)
{
return;判断是否可以向右移动
}
}
setfillstyle(SOLID_FILL,backcolor);设置背景色以消除不需要的格子
for (i=0;i=3;i++)
{
haveit=0;
for (j=0;j=3;j++)
{
if (nowinfo-x==nowinfo-x[j]+1&&nowinfo-y==nowinfo-y[j]) {haveit=1;break;}
}
if (haveit==0)判断翻转后该格子是否显示,若不显示,将该格子设为背景色
{
grid[x+nowinfo-x][y+nowinfo-y]=0;
if (y+nowinfo-y=4)判断该格子是否到了可以显示的区域
floodfill(80+(nowinfo-x+x)20+1,-20+(nowinfo-y+y)20+1,color);
}
}
setfillstyle(SOLID_FILL,nowinfo-color);设置填冲色为方块的颜色
for (i=0;i=3;i++)
{
nowx=x+nowinfo-x+1;
nowy=y+nowinfo-y;
if (grid[nowx][nowy]!=2)
{
if (nowy=4)判断该格子是否到了可以显示的区域
floodfill(80+nowx20+1,-20+nowy20+1,color);
grid[nowx][nowy]=2;
}
}
x=x+1;
return;
}
void show_down ()
{
int i;计数器
int j;
int haveit;当前格子是否已经显示
int nowx;记录当前每个格子的位置
int nowy;
int key;
for (i=0;i=3;i++)
{
if (grid[x+nowinfo-x][y+nowinfo-y+1]==1)判断方块是否能够下落
{
for (j=0;j=3;j++)
{
grid[x+nowinfo-x[j]][y+nowinfo-y[j]]=1;
if (y+nowinfo-y[j]=3)
{判断游戏是否已经玩完
install(oldtimer);
setfillstyle(SOLID_FILL,1);
bar(0,465,640,480);
outtextxy(5,469,Do you want to restart (YN)...);
for (;;)
{
key=bioskey(0);
if (key==YES)
{
startset();
setfillstyle(SOLID_FILL,9);
bar(0,465,640,480);
return;
}
if (key==NO)
{
closegraph();
exit (0);}
}
}
}
delinfo(nowinfo);
scandel();扫描,删除
delay(2500);
while(bioskey(1)) bioskey(0);清除键盘缓冲区
clrkey();
nowinfo=nextinfo;得到新的方块
nextinfo=get_diamond();得到下一个方块
showsubwin(nextinfo);
x=nowinfo-start_x;重新设置方块位置
y=nowinfo-start_y;
return;
}
}
setfillstyle(SOLID_FILL,backcolor);设置背景色以消除不需要的格子
for (i=0;i=3;i++)
{
haveit=0;
for (j=0;j=3;j++)
{
if (nowinfo-x==nowinfo-x[j]&&nowinfo-y==nowinfo-y[j]+1) {haveit=1;break;}
}
if (haveit==0)判断翻转后该格子是否显示,若不显示,将该格子设为背景色
{
grid[x+nowinfo-x][y+nowinfo-y]=0;
if (y+nowinfo-y=4)判断该格子是否到了可以显示的区域
floodfill(80+(nowinfo-x+x)20+1,-20+(nowinfo-y+y)20+1,color);
}
}
setfillstyle(SOLID_FILL,nowinfo-color);设置填冲色为方块的颜色
for (i=0;i=3;i++)
{
nowx=x+nowinfo-x;
nowy=y+nowinfo-y+1;
if (grid[nowx][nowy]!=2)如果该格子还没有被显示
{
if (nowy=4)
floodfill(80+nowx20+1,-20+nowy20+1,color);
grid[nowx][nowy]=2;
}
}
y=y+1;
return;
}
void print()测试用函数
{
int i;
int j;
gotoxy(1,1);
for (j=0;j=22;j++)
{for (i=0;i=11;i++)
{
printf (%d,grid[j]);}
printf (n);
}
}
void scandel()
{
int i;
int k;
int j;
int num;
int scoreadd;
scoreadd=0;
for (k=21;k=4;k--)
{
num=0;
for (i=1;i=10;i++)
{
if (grid[k]==1) num++;
}
if (num==10)
{
scoreadd++;
for (i=1;i=10;i++)
{
setfillstyle(SOLID_FILL,backcolor);
floodfill(80+i20+1,-20+k20+1,color);
}
for (j=k;j=5;j--)
{
for (i=1;i=10;i++)
{
setfillstyle(SOLID_FILL,getpixel(80+i20+1,-40+j20+1));
floodfill(80+i20+1,-20+j20+1,color);
grid[j]=grid[j-1];
}
}
for (i=1;i=10;i++)
{
setfillstyle(SOLID_FILL,backcolor);
floodfill(80+i20+1,61,color);
grid[4]=0;
}
k++;
}
}
if (scoreadd!=0) showscore(2scoreadd-1);
}
void interrupt newtimer()新的定时中断调用
{
int leveltemp;
leveltemp=11-level;
count++;
if(count=leveltemp)
{
addtobuffer(DOWN);
count=0;
}
(oldtimer)();
}
void install (void interrupt (paddr)())
{
disable();
setvect(0x1c,paddr);
enable();
}
void delinfo (struct diamond info)释放开辟的空间
{
struct diamond now;
struct diamond next;
now=info-next;
next=info-next;
while(next!=info)
{
next=now-next;
free(now);
now=next;
}
free(info);
}
void addtobuffer(int c)向键盘缓冲区中增加一个DOWN
{
unsigned i;
i=(unsigned far )0x0040001CL;
(unsigned far )(0x00400000L i)=c;
i+=2;
if (i=(unsigned far )0x00400082L) i=(unsigned far )0x00400080L;
(unsigned far )0x0040001CL=i;
}
void clrkey()调用dos中断清空键盘缓冲区,未使用此方法.
{
union REGS in ;
in.h.ah = 0x0c ;
in.h.al = 0x00 ;
intdos(&in , &in) ;
}
void showsubwin(struct diamond next)
{
int i;计数器
int j;
setfillstyle (SOLID_FILL,backcolor);
for (i=0;i=3;i++)
{
for(j=0;j=3;j++)
{
floodfill(361+20i,61+20j,color);
}
}
setfillstyle (SOLID_FILL,next-color);
for (i=0;i=3;i++)
{
floodfill(381+next-x20,81+next-y20,color);
}
}
void showscore(int scoreget)
{
char sscore[6];
char slevel[2];
score+=scoreget;
if (score1000) level=score100+1;
sprintf(sscore,%d,score);
sprintf(slevel,%d,level);
setfillstyle(SOLID_FILL,9);
bar(406,179,490,203);
setcolor(14);
outtextxy (408,180,slevel);
outtextxy (408,195,sscore);
}
void startset()
{
int i;
int j;
setfillstyle(SOLID_FILL,backcolor);
for(i=0;i=21;i++)重新初始化
{
for(j=1;j=10;j++)
if (grid[j]!=0)
{
grid[j]=0;
if (i=4) floodfill(80+j20+1,-20+i20+1,color);
}
}
score=0;
showscore(0);
nowinfo=get_diamond ();得到一个当前方块
x=nowinfo-start_x;初始化方块位置
y=nowinfo-start_y;
nextinfo=get_diamond ();得到下一个方块
showsubwin(nextinfo);
install(newtimer);
}