[讨论]俄罗斯方块中的问题
议题作者:louwangzhiyu信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
checkfull函数中有一个错误,不过找不到,您帮忙找找?
[code]#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include<stdio.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00 /*键盘控制*/
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define top 50
#define bottom 450
#define left 50 /*在屏幕中的位置*/
#define right 275
#define delaytime 65534 /*迟延时间*/
#define row 16
#define line 9 /*16行,9列*/
#define step 50 /*多次用到这个数,没有什么含义*/
#define COLOR 6 /*颜色*/
int four(int m,int n);
int oneoneoneone(int m,int n);
int twotwo(int m,int n);
int twotwol(int m,int n);
int onetwoonelz(int m,int n);
int onetwoonerz(int m,int n);
int twotwor(int m,int n); /*十九个不同形状的方块*/
int onetwoonelt(int m,int n);
int onethreem(int m,int n);
int onetwoonert(int m,int n);
int threeoneh(int m,int n);
int oneonetwol(int m,int n);
int threeoner(int m,int n);
int twooneoner(int m,int n);
int onethreer(int m,int n);
int oneonetwor(int m,int n);
int threeonel(int m,int n);
int twooneonel(int m,int n);
int onethreel(int m,int n);
int i,j,n;
void checkfull(int n); /*检查某一行是否已满*/
int recorder[16][9]={0}; /*记录每个小格的状态*/
int key; /*按键*/
int highnum[9]={0}; /*每一列有的小格个数*/
int check;
void Init(void); /*初使化*/
void Close(void); /*关闭*/
void PlayIt(void); /*过程*/
void main(void)
{
Init();
PlayIt(); /*主程序*/
Close();
}
void Init(void)
{
int gd=DETECT,gm;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"e:\\tc"); /*初使化为图形模式*/
cleardevice();
}
void PlayIt(void)
{
setcolor(11);
setbkcolor(0);
setlinestyle(0,0,3);
rectangle(left,top,right,bottom); /*画几个框,游戏的界面*/
setfillstyle(SOLID_FILL,COLOR);
srand((unsigned)time(0));
while(1)
{
n=rand()%19+1; /*在没有按ESC和方块没有满的情况下
switch(n) 随机地出现方块*/
{
case 1:
four(0,0);break;
case 2:
oneoneoneone(0,0);break;
case 3:
twotwo(0,0);break;
case 4:
twotwol(0,0);break;
case 5:
onetwoonelz(0,0);break;
case 6:
twotwor(0,0);break;
case 7:
onetwoonerz(0,0);break;
case 8:
onetwoonelt(0,0);break;
case 9:
onethreem(0,0);break;
case 10:
onetwoonert(0,0);break;
case 11:
threeoneh(0,0);break;
case 12:
oneonetwol(0,0);break;
case 13:
threeoner(0,0);break;
case 14:
twooneoner(0,0);break;
case 15:
onethreer(0,0);break;
case 16:
oneonetwor(0,0);break;
case 17:
threeonel(0,0);break;
case 18:
twooneonel(0,0);break;
case 19:
onethreel(0,0);break;
}
if(kbhit()==ESC)
{
break;
}
}
}
void Close(void)
{
closegraph();
}
int four(int m,int n)
{ /*四个小方格的方块,一直下落直到和该列的个数和为
while(1) 17时停止.如果遇到按键,变化.停止后,所在各列小格数
{ 加一,如果是17,游戏结束.记录四个小格的状态.以下18
while(!kbhit()) 个和这个类似.*/
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,225+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,225+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+6]>=16)||(n+highnum[m+3]>=16))
{
break;
}
if(highnum[m+4]>=16)
{
break;
}
}
if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+6]>=16)||(n+highnum[m+3]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,225+m*25,50+n*25);
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
if(highnum[m+6]<17-n)
highnum[m+6]=17-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+5][n]=1;
recorder[m+6][n]=1;
checkfull(n);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
oneoneoneone(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0))
m=m-1;
else if((key==RIGHT)&&(m<2)&&(recorder[m+8][n]==0))
m=m+1;
else
;
key=0;
}
}
int oneoneoneone(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,150+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,150+n*25);
n=n+1;
if(n+highnum[m+4]>=13)
{
break;
}
if(highnum[m+4]>=16)
{
break;
}
}
if(n+highnum[m+4]>=13)
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,125+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
recorder[m+4][n]=1;
recorder[m+4][n+1]=1;
recorder[m+4][n+2]=1;
recorder[m+4][n+3]=1;
checkfull(n+3);
checkfull(n+2);
checkfull(n+1);
checkfull(n);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
four(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0))
m=m+1;
else
;
key=0;
}
}
int twotwo(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,200+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,200+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,200+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+5][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0))
m=m+1;
else
;
key=0;
}
}
int twotwol(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,200+m*25,75+n*25);
bar(125+m*25,75+n*25,175+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,200+m*25,75+n*25);
bar(125+m*25,75+n*25,175+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=16))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,200+m*25,50+n*25);
bar(125+m*25,50+n*25,175+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<16-n)
highnum[m+3]=16-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+5][n]=1;
recorder[m+3][n+1]=1;
recorder[m+4][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onetwoonelz(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+7][n]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+3][n+1]==0)&&(recorder[m+6][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int onetwoonelz(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,100+n*25);
bar(175+m*25,75+n*25,200+m*25,125+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,100+n*25);
bar(175+m*25,75+n*25,200+m*25,125+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=14))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=14))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,75+n*25);
bar(175+m*25,50+n*25,200+m*25,100+n*25);
if(highnum[m+5]<16-n)
highnum[m+5]=16-n;
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
recorder[m+4][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
recorder[m+5][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
twotwol(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+5][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0)&&(recorder[m+7][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int twotwor(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,175+m*25,75+n*25);
bar(150+m*25,75+n*25,200+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,175+m*25,75+n*25);
bar(150+m*25,75+n*25,200+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15)||(n+highnum[m+3]>=16))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+5]>=15)||(n+highnum[m+3]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,175+m*25,50+n*25);
bar(150+m*25,50+n*25,200+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
if(highnum[m+5]<16-n)
highnum[m+5]=16-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onetwoonerz(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int onetwoonerz(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,100+n*25);
bar(125+m*25,75+n*25,150+m*25,125+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,100+n*25);
bar(125+m*25,75+n*25,150+m*25,125+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=14))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=14))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,75+n*25);
bar(125+m*25,50+n*25,150+m*25,100+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<16-n)
highnum[m+3]=16-n;
recorder[m+4][n]=1;
recorder[m+3][n+1]=1;
recorder[m+4][n+1]=1;
recorder[m+3][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
twotwor(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0)&&(recorder[m+3][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+5][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int onetwoonelt(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(175+m*25,75+n*25,200+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(175+m*25,75+n*25,200+m*25,100+n*25);
n=n+1;
if(n+highnum[m+4]>=13)
{
break;
}
}
if(n+highnum[m+4]>=13)
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,100+n*25);
bar(175+m*25,50+n*25,200+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<16-n)
highnum[m+5]=16-n;
recorder[m+4][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
recorder[m+4][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onethreem(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0)&&(recorder[m+6][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int onethreem(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,75+n*25,200+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,75+n*25,200+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=15))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+5]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(150+m*25,25+n*25,175+m*25,50+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+4]<16-n)
highnum[m+3]=16-n;
if(highnum[m+5]<16-n)
highnum[m+5]=16-n;
recorder[m+4][n]=1;
recorder[m+3][n+1]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onetwoonert(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+7][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int onetwoonert(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,75+n*25,150+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,75+n*25,150+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=15))
{
break;
}
}
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,100+n*25);
bar(125+m*25,50+n*25,150+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<16-n)
highnum[m+3]=16-n;
recorder[m+4][n]=1;
recorder[m+3][n+1]=1;
recorder[m+4][n+1]=1;
recorder[m+4][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
threeoneh(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+3][n+1]==0)&&(recorder[m+4][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int threeoneh(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(150+m*25,75+n*25,175+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(150+m*25,75+n*25,175+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=16))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,200+m*25,50+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onetwoonelt(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0)&&(recorder[m+6][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int oneonetwol(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(175+m*25,100+n*25,200+m*25,125+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(175+m*25,100+n*25,200+m*25,125+n*25);
n=n+1;
if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=14))
{
break;
}
}
if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=14))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,100+n*25);
bar(175+m*25,75+n*25,200+m*25,100+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<15-n)
highnum[m+5]=15-n;
recorder[m+4][n]=1;
recorder[m+4][n+1]=1;
recorder[m+4][n+2]=1;
recorder[m+5][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
threeoner(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+7][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int threeoner(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(125+m*25,75+n*25,150+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(125+m*25,75+n*25,150+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=16)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=15))
{
break;
}
}
if((n+highnum[m+4]>=16)||(n+highnum[m+3]>=16)||(n+highnum[m+5]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,200+m*25,50+n*25);
bar(125+m*25,50+n*25,150+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+5][n]=1;
recorder[m+3][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
twooneoner(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+3][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0)&&(recorder[m+5][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int twooneoner(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,50+n*25,150+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,50+n*25,150+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=16))
{
break;
}
}
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,100+n*25);
bar(125+m*25,25+n*25,150+m*25,50+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onethreer(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int onethreer(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(100+m*25,75+n*25,175+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(100+m*25,75+n*25,175+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(100+m*25,50+n*25,175+m*25,75+n*25);
bar(150+m*25,25+n*25,175+m*25,50+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<16-n)
highnum[m+3]=16-n;
if(highnum[m+2]<16-n)
highnum[m+2]=16-n;
recorder[m+4][n]=1;
recorder[m+3][n+1]=1;
recorder[m+4][n+1]=1;
recorder[m+2][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
oneonetwol(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-2)&&(recorder[m+4][n]==0)&&(recorder[m+2][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0))
m=m+1;
else
;
key=0;
}
}
int oneonetwor(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,100+n*25,150+m*25,125+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(150+m*25,50+n*25,175+m*25,125+n*25);
bar(125+m*25,100+n*25,150+m*25,125+n*25);
n=n+1;
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=14))
{
break;
}
}
if((n+highnum[m+4]>=14)||(n+highnum[m+3]>=14))
{
setfillstyle(SOLID_FILL,COLOR);
bar(150+m*25,25+n*25,175+m*25,100+n*25);
bar(125+m*25,75+n*25,150+m*25,100+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<15-n)
highnum[m+3]=15-n;
recorder[m+4][n]=1;
recorder[m+3][n+2]=1;
recorder[m+4][n+1]=1;
recorder[m+4][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
threeonel(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+3][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+6][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int threeonel(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(175+m*25,75+n*25,200+m*25,100+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,200+m*25,75+n*25);
bar(175+m*25,75+n*25,200+m*25,100+n*25);
n=n+1;
if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+3]>=15))
{
break;
}
}
if((n+highnum[m+4]>=16)||(n+highnum[m+5]>=16)||(n+highnum[m+3]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,200+m*25,50+n*25);
bar(175+m*25,50+n*25,200+m*25,75+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+3]<17-n)
highnum[m+3]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+3][n]=1;
recorder[m+5][n]=1;
recorder[m+5][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
twooneonel(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+3][n]==0))
m=m-1;
else if((key==RIGHT)&&(m<3)&&(recorder[m+7][n]==0))
m=m+1;
else
;
key=0;
}
}
int twooneonel(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,50+n*25,150+m*25,125+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(125+m*25,50+n*25,150+m*25,125+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=16))
{
break;
}
}
if((n+highnum[m+4]>=14)||(n+highnum[m+5]>=16))
{
setfillstyle(SOLID_FILL,COLOR);
bar(125+m*25,25+n*25,150+m*25,100+n*25);
bar(150+m*25,25+n*25,175+m*25,50+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<17-n)
highnum[m+5]=17-n;
recorder[m+4][n]=1;
recorder[m+5][n]=1;
recorder[m+4][n+1]=1;
recorder[m+4][n+2]=1;
checkfull(n);
checkfull(n+1);
checkfull(n+2);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
onethreel(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-3)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0)&&(recorder[m+4][n+2]==0))
m=m-1;
else if((key==RIGHT)&&(m<4)&&(recorder[m+7][n]==0)&&(recorder[m+6][n+1]==0)&&(recorder[m+6][n+2]==0))
m=m+1;
else
;
key=0;
}
}
int onethreel(int m,int n)
{
while(1)
{
while(!kbhit())
{
setfillstyle(SOLID_FILL,COLOR);
bar(100+m*25,75+n*25,175+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
delay(delaytime);
setfillstyle(SOLID_FILL,0);
rectangle(left,top,right,bottom);
bar(100+m*25,75+n*25,175+m*25,100+n*25);
bar(150+m*25,50+n*25,175+m*25,75+n*25);
n=n+1;
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
{
break;
}
}
if((n+highnum[m+4]>=15)||(n+highnum[m+3]>=15)||(n+highnum[m+2]>=15))
{
setfillstyle(SOLID_FILL,COLOR);
bar(100+m*25,50+n*25,175+m*25,75+n*25);
bar(150+m*25,25+n*25,175+m*25,50+n*25);
if(highnum[m+4]<17-n)
highnum[m+4]=17-n;
if(highnum[m+5]<16-n)
highnum[m+5]=16-n;
if(highnum[m+6]<16-n)
highnum[m+6]=16-n;
recorder[m+4][n]=1;
recorder[m+4][n+1]=1;
recorder[m+5][n+1]=1;
recorder[m+6][n+1]=1;
checkfull(n);
checkfull(n+1);
m=0;
n=0;
break;
}
key=bioskey(0);
if(key==ESC)
break;
else if(key==UP)
{
oneonetwor(m,n);
break;
}
else if(key==DOWN)
n=n+1;
else if((key==LEFT)&&(m>-4)&&(recorder[m+4][n]==0)&&(recorder[m+4][n+1]==0))
m=m-1;
else if((key==RIGHT)&&(m<2)&&(recorder[m+6][n]==0)&&(recorder[m+8][n+1]==0))
m=m+1;
else
;
key=0;
}
}
void checkfull(int n) /*检查该行是否已满,如果,则消去该行,以上各行向下变一行*/
{
int i,j=0,k;
k=n;
for(i=0;i<9;i++)
{
if(recorder[i][n]==1)
{
j=j+1;
}
}
if(j==9)
{
for(i=0;i<9;i++)
{
setfillstyle(SOLID_FILL,0);
bar(50+i*25,25+k*25,50+i*25+25,50+k*25);
highnum[i]=highnum[i]-1;
}
for(k=n;k>0;k--)
for(j=0;j<9;j++)
{
setfillstyle(SOLID_FILL,0);
bar(50+j*25,25+k*25,50+j*25+25,50+k*25);
if(recorder[j][k-1]==1)
{
recorder[j][k]=1;
setfillstyle(SOLID_FILL,COLOR);
bar(50+j*25,25+k*25,50+j*25+25,50+k*25);
}
else
recorder[j][k]=0;
}
}
}[/code]
页:
[1]