c语言扫雷的游戏续集

#include 
#include 
#include 
#include 
#include 
#include 

#define ESC 0x011b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define SPACE 0x3920
#define Y 0x1579
#define N 0x316e
#define clearkbd(); while(bioskey(1)) bioskey(0); /*清空键盘缓冲队列*/

void update();
void messagebox();
void process();
void initremove();
void initinfo();
void initbox();
void initposition();
void next_shape();

typedef struct shape /*形状单一状态的记录*/
{ int attr;
int co[8];
}shape;

typedef struct RE_AB /*相对,绝对坐标记录*/
{ int Rx,Ry;
int x1,x2,y1,y2;
}RE_AB;

RE_AB RA;

shape p[19]={ { RED,0,1,1,0,1,1,2,1 }, /*数组中保证y最大的在最后,以便initposition使用*/
{ RED,0,1,1,0,1,1,1,2 },
{ RED,0,0,1,0,2,0,1,1 },
{ RED,0,0,0,1,1,1,0,2 },
{ GREEN,0,0,1,0,2,0,3,0 },
{ GREEN,0,0,0,1,0,2,0,3 },
{ CYAN,0,0,0,1,1,0,1,1 },
{ BROWN,0,0,1,0,1,1,2,1 },
{ BROWN,1,0,0,1,1,1,0,2 },
{ BLUE,1,0,2,0,1,1,0,1 },
{ BLUE,0,0,0,1,1,1,1,2 },
{ MAGENTA,0,0,0,1,0,2,1,2 },
{ MAGENTA,2,0,0,1,1,1,2,1},
{ MAGENTA,0,0,1,0,1,1,1,2 },
{ MAGENTA,0,0,0,1,1,0,2,0 },
{ YELLOW,0,2,1,0,1,1,1,2 },
{ YELLOW,0,0,1,0,2,0,2,1 },
{ YELLOW,1,0,0,0,0,1,0,2},
{ YELLOW,0,0,0,1,1,1,2,1 },
};
int nback,nleft,nright,r_f[12][22],rs1,rs2,xcors,xcorb,ycors,ycorb; 
/*检查方快有没有左,右,下接触,游戏区内所有格子有无颜色记录数组,rs1形状记录,rs2为提示框用,记录小格子在游戏区中的位置,按键存储*/

void interrupt (*oldint)(); /*系统定时中断*/
int count_down=0,count_other=0; /*中断记时*/

void interrupt newint() /*设置新的中断程序*/
{ count_down++;
count_other++;
oldint();
}

void intenable() /*设置中断向量表,启动新的中断程序*/
{ oldint=getvect(0x1c);
disable();
setvect(0x1c,newint);
enable();
}

void intrestore() /*恢复中断向量*/
{ disable();
setvect(0x1c,oldint);
enable();
}

void HZ12(int x0,int y0,int w,int color,char *s) /*根据字模,在dos下显示汉字*/
/*横坐标,纵坐标,字间隔,汉字颜色,汉字字符串*/
{ FILE *fp;
register char buffer[24];
register char str[2];
unsigned long fpos;/*fpos为最终偏移动量*/
register int i,j,k;
fp=fopen(hzk12,r);/*打开12*12汉字苦*/
while(*s)/*一直到字符串结束为止*/
{
if(*s<0)/*汉字输出*/
{ str[0]=(*s)-0xa0;
str[1]=*(s+1)-0xa0;
fpos=((str[0]-1)*94+(str[1]-1))*24L;/*计算汉字在hzk12的偏移量*/
fseek(fp,fpos,SEEK_SET);/*指针移动到当前位置*/
fread(buffer,24,1,fp);/*读取一个汉字到数组中*/
for(i=0;i<12;i++)/*12行*/
for(j=0;j<2;j++)/*两个字节*/
for(k=0;k<8;k++)/*8位*/
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)/*是一就画点*/
putpixel(x0+8*j+k,y0+i,color);
s+=2;/*一个汉字占两个字节,现在将指针移动两个字节*/
x0+=w;/*显示坐标也按照间隔移动*/
}
else/*显示非汉字字符*/
{ settextstyle(0,0,1);
setcolor(color);
str[0]=*s;str[1]=0;
outtextxy(x0,y0+3,str);/*显示单个字符*/
x0+=w-7;/*显示单个字符后的x坐标变化*/
s++;/*指针移动到下一个字节*/
}
}
fclose(fp);
}

void translation() /*把相对坐标解释为绝对坐标*/
{ if(RA.Rx==1)
{ RA.x1=1; RA.x2=16; }
else
{ RA.x1=16*(RA.Rx-1); RA.x2=16*RA.Rx; }
if(RA.Ry==1)
{ RA.y1=1; RA.y2=16; }
else
{ RA.y1=16*(RA.Ry-1); RA.y2=16*RA.Ry; }
}

int check_b() /*检查是否到达低部*/
{ int x,y,i,zf=0; /*zf为是否有颜色填充记录*/
for(i=0;i<7;i++,i++)
{ x=RA.Rx+p[rs1].co[i];
y=RA.Ry+p[rs1].co[i+1];
if(y>=6)
zf+=r_f[x-15][y-6+1];
}
if(zf==0)
return 1;
else
return 0;
}

int finish()
{ int tfull=0,i; /*判断顶层空间是否有填充*/ 
for(i=1;i<11;i++)
tfull+=r_f[i][1];
if(tfull!=0)
return 1; /*告诉judge()可以结束了*/
}

int check_l() /*检查形状是否与左接触*/
{ int x,y,i,zf=0;
for(i=0;i<7;i++,i++)
{ x=RA.Rx+p[rs1].co[i];
y=RA.Ry+p[rs1].co[i+1];
if(y>6)
zf+=r_f[x-15-1][y-6];
if(y<=6&&x==16)
zf+=1;
}
if(zf==0)
return 1;
else
return 0;
} 

int check_r() /*检查形状是否与右接触*/
{ /*zf为是否有颜色填充记录*/
int x,y,i,zf=0; /*zf为是否有颜色填充记录*/
for(i=0;i<7;i++,i++)
{
x=RA.Rx+p[rs1].co[i];
y=RA.Ry+p[rs1].co[i+1];
if(y>6)
zf+=r_f[x-15+1][y-6];
if(y<=6&&x==25)
zf+=1;
}
if(zf==0)
return 1;
else
return 0;
}

void check_touch()
{ nback=check_b();
nleft=check_l();
nright=check_r();
}

void draw(int cb) /*画形状,cb=1以填充色画形状,cb=2以背景色画形状,cb=3以白色画形状*/
{ int i,recordx=RA.Rx,recordy=RA.Ry;
for(i=0;i<7;i++,i++)
{ RA.Rx+=p[rs1].co[i];
RA.Ry+=p[rs1].co[i+1];
if(RA.Ry<=6)
{ RA.Rx=recordx;
RA.Ry=recordy;
continue;
}
translation();
if(cb==1)
setfillstyle(1,p[rs1].attr);
else
if(cb==2)
setfillstyle(1,BLACK);
else
if(cb==3)
{ setfillstyle(1,WHITE);
r_f[RA.Rx-15][RA.Ry-6]=1; /*置对应数组标记元素*/
}

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);
RA.Rx=recordx;
RA.Ry=recordy;
}
}

void mov(int key) /*向下,左,右移动方块*/
{ draw(2);
if(key==LEFT&&nleft)
RA.Rx--;
else
if(key==RIGHT&&nright)
RA.Rx++;
else
RA.Ry++;
nback=check_b();
if(nback) /*判断形状有没有到达底部,有就将其颜色变为白色*/
draw(1);
else
draw(3);
}

void change() /*变换形状*/
{ int status=rs1,buffer,i,x,y,zf=0;
if(p[rs1].attr==p[rs1+1].attr)
rs1++;
else
while(p[rs1].attr==p[rs1-1].attr)
rs1--;

for(i=0;i<7;i++,i++) /*检查变化形状后是否与已存形状发生冲突*/
{ x=RA.Rx+p[rs1].co[i];
y=RA.Ry+p[rs1].co[i+1];
if(y>6)
zf+=r_f[x-15][y-6]; 
}
if(zf!=0) 
rs1=status; 

buffer=rs1;
rs1=status;
status=buffer;
draw(2);

buffer=rs1;
rs1=status;
status=buffer;

nback=check_b(); /*判断变化后的形状是不是到达了低部,这个检查是十分必要的*/
if(nback) 
draw(1);
else
draw(3);
}

void accelerate()
{ if(count_down>=1)
{ check_touch(); /*消除上一步动作对方块状态的影响*/
count_down=0;
if(nback) /*0表示到达底部,1表示没有到达*/
mov(DOWN);
}
}

void drawbox() /*画方块所在方框*/
{ int xcor,ycor;
for(xcor=xcors;xcor<=xcorb;xcor++)
for(ycor=ycors;ycor<=ycorb;ycor++)
{ if(xcor==xcors||xcor==xcorb||ycor==ycors||ycor==ycorb)
{ RA.Rx=xcor;
RA.Ry=ycor;
translation();
setfillstyle(1,DARKGRAY);
bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);
}
}
}

void erasure(int k)
{ int i,j,recordx=RA.Rx,recordy=RA.Ry;
{ j=k-1;
for(;j>0;j--)
{ for(i=1;i<11;i++)
{ r_f[i][j+1]=r_f[i][j];
RA.Rx=i+15;
RA.Ry=j+1+6;
translation();
if(r_f[i][j+1]==1)
setfillstyle(1,WHITE);
else
setfillstyle(1,BLACK);
bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);
RA.Rx=recordx;
RA.Ry=recordy;
}
}
}
}

void pause()
{ HZ12(450,400,15,BLACK,正常);
HZ12(450,400,15,GREEN,暂停);
for(;;)
if(bioskey(1)&&bioskey(0)==SPACE)
{ clearkbd();
HZ12(450,400,15,BLACK,暂停);
HZ12(450,400,15,RED,正常);
return;
}
}

void judge() 
{ int i,j,full=0; /*full等于10说明某一行满,该消除了*/ 
if(finish()) /*判断游戏是否该结束了*/
messagebox(); /*win编程里有这个函数*/ 
for(j=1;j<21;j++) /*判断某一行是否满了*/
{ for(i=1;i<11;i++)
full+=r_f[i][j];
if(full==10)
erasure(j); /*消除这行*/ 
full=0;
}
}

void update() /*使程序可以重新运行*/
{ cleardevice();
setbkcolor(BLACK);
initinfo(); /*提示信息初始化*/
initbox(); /*游戏框架初始化*/
srand((unsigned)time(NULL)); /*随机器函数的初始化*/
rs1=random(19);
rs2=random(19);
next_shape();
initposition(); /*方块最开始的出现位置*/
initremove(); /*记录每个方格有无颜色填充数组初始化*/
HZ12(450,400,15,RED,正常);
process();
}

void EXIT()
{ closegraph();
intrestore(); /*恢复中断向量*/
exit(0);
}

void initremove()
{ int i,j;
for(i=0;i<12;i++)
for(j=0;j<22;j++)
if(i==0||i==11||j==0||j==21)
r_f[i][j]=1;
else
r_f[i][j]=0;
}

void initinfo()
{ char aStr[2];
setcolor(RED);
outtextxy(450,100,This game's writer is:);
HZ12(450,140,15,RED,该程序作者:NULL);
outtextxy(525,110,NULL);
outtextxy(450,180,FUNCTION FOR KEYS:);
outtextxy(450,200,UP:change the shape);
outtextxy(450,210,DOWN:accelerate);
outtextxy(450,220,LEFT:move left);
outtextxy(450,230,RIGHT:move right);
outtextxy(450,240,ESC:exit this game);
outtextxy(450,250,SPACE:pause);
HZ12(450,260,20,RED,上:);
HZ12(450,280,20,RED,下:);
HZ12(450,300,20,RED,左:);
HZ12(450,320,20,RED,右:);
HZ12(450,340,20,RED,ESC:退出);
HZ12(450,360,15,RED,空格: 暂停/开始);
HZ12(450,380,15,RED,目前状态:);
HZ12(20,200,15,RED,下一个形状);

aStr[0]=24;
aStr[1]=0;
aStr[6]=0;
HZ12(480,260,12,GREEN,aStr);
HZ12(500,260,12,GREEN,( 变形 ));
aStr[0]=25;
aStr[1]=0;
HZ12(480,280,12,GREEN,aStr);
HZ12(500,280,12,GREEN,( 加速 ));
aStr[0]=27;
aStr[1]=0;
HZ12(480,300,12,GREEN,aStr);
HZ12(500,300,12,GREEN,向左);
aStr[0]=26;
aStr[1]=0;
HZ12(480,320,12,GREEN,aStr);
HZ12(500,320,12,GREEN,向右);
}

void messagebox()
{ int key;
setcolor(GREEN);
setfillstyle(1,DARKGRAY);
rectangle(220,200,420,300);
bar(221,201,419,299);
HZ12(280,210,15,GREEN,GAME OVER);
HZ12(275,230,15,GREEN,重新游戏: Y); 
HZ12(275,270,15,GREEN,退出游戏: N); 
HZ12(450,400,15,BLACK,正常);
HZ12(450,400,15,GREEN,GAME OVER);
for(;;)
if(bioskey(1))
{ key=bioskey(0);
if(key==Y)
{ clearkbd();
update();
}
else
if(key==N)
{ clearkbd();
EXIT();
}
else
clearkbd();
}
}

void initbox()
{ xcors=15; /*画游戏框*/
xcorb=26;
ycors=6;
ycorb=27;
drawbox();

xcors=2; /*画提示框*/
xcorb=7;
ycors=6;
ycorb=11;
drawbox();
}

void initposition()
{ RA.Rx=18;
RA.Ry=6-p[rs1].co[7];;
RA.x1=0;
RA.x2=0;
RA.y1=0;
RA.y2=0;
}

  http://www.huihui.cn/share/32085516

  http://www.huihui.cn/share/32086062

  http://www.huihui.cn/share/32086460

  http://www.huihui.cn/share/32086902

  http://www.huihui.cn/share/32087540

  http://www.huihui.cn/share/32088042

  http://www.huihui.cn/share/32088540

  http://www.huihui.cn/share/32088980

  http://www.huihui.cn/share/32089946

  http://www.huihui.cn/share/32090314

  http://www.huihui.cn/share/32091338

  http://www.huihui.cn/share/32091870

  http://www.huihui.cn/share/32092320

  http://www.huihui.cn/share/32092780

  http://www.huihui.cn/share/32093232

  http://www.huihui.cn/share/32093726

  http://www.huihui.cn/share/32094168

  http://www.huihui.cn/share/32094774

  http://www.huihui.cn/share/32095230

  http://www.huihui.cn/share/32095744

  http://www.huihui.cn/share/32096204

  http://www.huihui.cn/share/32096586

  http://www.huihui.cn/share/32097012

  http://www.huihui.cn/share/32097454

  http://www.huihui.cn/share/32097908

  http://www.huihui.cn/share/32098344

  http://www.huihui.cn/share/32098902

  http://www.huihui.cn/share/32099278

  http://www.huihui.cn/share/32099690

  http://www.huihui.cn/share/32100098

  http://www.huihui.cn/share/32100502

  http://www.huihui.cn/share/32101128

  http://www.huihui.cn/share/32101556

  http://www.huihui.cn/share/32102210

  http://www.huihui.cn/share/32103274

  http://www.huihui.cn/share/32103798

  http://www.huihui.cn/share/32104280

  http://www.huihui.cn/share/32104786

  http://www.huihui.cn/share/32105234

  http://www.huihui.cn/share/32105826

  http://www.huihui.cn/share/32106354

  http://www.huihui.cn/share/32106792

  http://www.huihui.cn/share/32107316

  http://www.huihui.cn/share/32107962

  http://www.huihui.cn/share/32108410

  http://www.huihui.cn/share/32108974

  http://www.huihui.cn/share/32109544

  http://www.huihui.cn/share/32110134

  http://www.huihui.cn/share/32110740

  http://www.huihui.cn/share/32111290

  http://www.huihui.cn/share/32111862

  http://www.huihui.cn/share/32112468

  http://www.huihui.cn/share/32114722

  http://www.huihui.cn/share/32117666

  http://www.huihui.cn/share/32118256

  http://www.huihui.cn/share/32120098

  http://www.huihui.cn/share/32120644

  http://www.huihui.cn/share/32121382

  http://www.huihui.cn/share/32125100

  http://www.huihui.cn/share/32125730

  http://www.huihui.cn/share/32126162

  http://www.huihui.cn/share/32126698

  http://www.huihui.cn/share/32151652

  http://www.huihui.cn/share/32152160

  http://www.huihui.cn/share/32153714

  http://www.huihui.cn/share/32154340

  http://www.huihui.cn/share/32155058

  http://www.huihui.cn/share/32159676

  http://www.huihui.cn/share/32172238

  http://www.huihui.cn/share/32173152

  http://www.huihui.cn/share/32173782

  http://www.huihui.cn/share/32174352

  http://www.huihui.cn/share/32174920

  http://www.huihui.cn/share/32175576

  http://www.huihui.cn/share/32176140

  http://www.huihui.cn/share/32176780

  http://www.huihui.cn/share/32177318

  http://www.huihui.cn/share/32177858

  http://www.huihui.cn/share/32178394

  http://www.huihui.cn/share/32179108

  http://www.huihui.cn/share/32187636

  http://www.huihui.cn/share/32188162

  http://www.huihui.cn/share/32193002

  http://www.huihui.cn/share/32198494

  http://www.huihui.cn/share/32199012

  http://www.huihui.cn/share/32200718

  http://www.huihui.cn/share/32201590

  http://www.huihui.cn/share/32202668

  http://www.huihui.cn/share/32204074

  http://www.huihui.cn/share/32206528

  http://www.huihui.cn/share/32208680

  http://www.huihui.cn/share/32209208

  http://www.huihui.cn/share/32209734

  http://www.huihui.cn/share/32225096

  http://www.huihui.cn/share/32225524

  http://www.huihui.cn/share/32226046

  http://www.huihui.cn/share/32226410

  http://www.huihui.cn/share/32226832

  http://www.huihui.cn/share/32227310

  http://www.huihui.cn/share/32227720

  http://www.huihui.cn/share/32228310

  http://www.huihui.cn/share/32229516

  http://www.huihui.cn/share/32230042

  http://www.huihui.cn/share/32230516

  http://www.huihui.cn/share/32230886

  http://www.huihui.cn/share/32231390

  http://www.huihui.cn/share/32231776

  http://www.huihui.cn/share/32232158

  http://www.huihui.cn/share/32232526

  http://www.huihui.cn/share/32232914

  http://www.huihui.cn/share/32233276

  http://www.huihui.cn/share/32233754

  http://www.huihui.cn/share/32234242

  http://www.huihui.cn/share/32234714

  http://www.huihui.cn/share/32235140

  http://www.huihui.cn/share/32235714

  http://www.huihui.cn/share/32236134

  http://www.huihui.cn/share/32236642

  http://www.huihui.cn/share/32237682

  http://www.huihui.cn/share/32241870

  http://www.huihui.cn/share/32242318

  http://www.huihui.cn/share/32242972

  http://www.huihui.cn/share/32244090

  http://www.huihui.cn/share/32244552

  http://www.huihui.cn/share/32261208

  http://www.huihui.cn/share/32262616

  http://www.huihui.cn/share/32263554

  http://www.huihui.cn/share/32264280

  http://www.huihui.cn/share/32265442

  http://www.huihui.cn/share/32266146

  http://www.huihui.cn/share/32266654

  http://www.huihui.cn/share/32267218

  http://www.huihui.cn/share/32267650

  http://www.huihui.cn/share/32268068

  http://www.huihui.cn/share/32268516

  http://www.huihui.cn/share/32269098

  http://www.huihui.cn/share/32269602

  http://www.huihui.cn/share/32270186

  http://www.huihui.cn/share/32270842

  http://www.huihui.cn/share/32271650

  http://www.huihui.cn/share/32272436

  http://www.huihui.cn/share/32275454

  http://www.huihui.cn/share/32285302

  http://www.huihui.cn/share/32285774

  http://www.huihui.cn/share/32286216

  http://www.huihui.cn/share/32286682

  http://www.huihui.cn/share/32287148

  http://www.huihui.cn/share/32287744

  http://www.huihui.cn/share/32288154

  http://www.huihui.cn/share/32288618

  http://www.huihui.cn/share/32289104

  http://www.huihui.cn/share/32289658

  http://www.huihui.cn/share/32290984

  http://www.huihui.cn/share/32291466

  http://www.huihui.cn/share/32293404

  http://www.huihui.cn/share/32293886

  http://www.huihui.cn/share/32294546

  http://www.huihui.cn/share/32295008

  http://www.huihui.cn/share/32295378

  http://www.huihui.cn/share/32295854

  http://www.huihui.cn/share/32296304

  http://www.huihui.cn/share/32296702

  http://www.huihui.cn/share/32297286

  http://www.huihui.cn/share/32297794

  http://www.huihui.cn/share/32298330

  http://www.huihui.cn/share/32298850

  http://www.huihui.cn/share/32299456

  http://www.huihui.cn/share/32299908

  http://www.huihui.cn/share/32300278

  http://www.huihui.cn/share/32302006

  http://www.huihui.cn/share/32302466

  http://www.huihui.cn/share/32304464

  http://www.huihui.cn/share/32305386

  http://www.huihui.cn/share/32306214

  http://www.huihui.cn/share/32306692

  http://www.huihui.cn/share/32307766

  http://www.huihui.cn/share/32308194

  http://www.huihui.cn/share/32309094

  http://www.huihui.cn/share/32309574

  http://www.huihui.cn/share/32310530

  http://www.huihui.cn/share/32310918

  http://www.huihui.cn/share/32315730

  http://www.huihui.cn/share/32316042

  http://www.huihui.cn/share/32316428

  http://www.huihui.cn/share/32317308

  http://www.huihui.cn/share/32317824

  http://www.huihui.cn/share/32318448

  http://www.huihui.cn/share/32319058

  http://www.huihui.cn/share/32322508

  http://www.huihui.cn/share/32323000

  http://www.huihui.cn/share/32323446

  http://www.huihui.cn/share/32323954

  http://www.huihui.cn/share/32324312

  http://www.huihui.cn/share/32327336

  http://www.huihui.cn/share/32332016

  http://www.huihui.cn/share/32332374

  http://www.huihui.cn/share/32332732

  http://www.huihui.cn/share/32333272

  http://www.huihui.cn/share/32333660

  http://www.huihui.cn/share/32333974

void next_shape() /*画下一形状提示框*/ { int recordx=RA.Rx,recordy=RA.Ry,buffer; RA.Rx=3; RA.Ry=7; draw(2); buffer=rs1; rs1=rs2; rs2=buffer; draw(1); RA.Rx=recordx; RA.Ry=recordy; buffer=rs1; rs1=rs2; rs2=buffer; } void process() /*游戏过程*/ { for(;;) { check_touch(); if(!nback) { rs1=rs2; rs2=random(19); /*产生另一种方块的码数*/ initposition(); judge(); /*判断某一行是否满了和这个游戏是否可以结束了*/ draw(1); next_shape(); } if(count_other>=1) { count_other=0; if(bioskey(1)) /*对按键的处理*/ { int key=bioskey(0); clearkbd(); /*清除键盘缓冲队列*/ if(key==ESC) EXIT(); if(key==LEFT&&nleft&&nback) mov(LEFT); if(key==RIGHT&&nright&&nback) mov(RIGHT); if(key==UP&&nback) change(); if(key==SPACE) pause(); if(key==DOWN) accelerate(); } } if(count_down>=4) { check_touch(); /*消除上一步动作对方块状态的影响*/ count_down=0; if(nback) /*0表示到达底部,1表示没有到达*/ mov(DOWN); } }/*for*/ } main() { int gdriver=DETECT,gmode=0; initgraph(&gdriver,&gmode,d:turboc); /*启动图形与中断部分*/ intenable(); update(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值