📄 russia2.c
字号:
/*作者:hum109 */
#include<stdlib.h>
#include<graphics.h>
#include<stdio.h>
int key,mark;
struct box
{
int xy[8];
int next;
int color;
} ;
int changex(int x)
{ int tx;
tx=(x-1)*20+170;
return tx;
}
int changey(int y)
{
int ty;
ty=(y-1)*20+40;
return ty;
}
drawbox(int x,int y,struct box *p)
{ setfillstyle(1,p->color);
bar(changex(p->xy[0]+x-1)+1,changey(p->xy[1]+y-1)+1,changex(p->xy[0]+x-1)+20-1,changey(p->xy[1]+y-1)+20-1);
bar(changex(p->xy[2]+x-1)+1,changey(p->xy[3]+y-1)+1,changex(p->xy[2]+x-1)+20-1,changey(p->xy[3]+y-1)+20-1);
bar(changex(p->xy[4]+x-1)+1,changey(p->xy[5]+y-1)+1,changex(p->xy[4]+x-1)+20-1,changey(p->xy[5]+y-1)+20-1);
bar(changex(p->xy[6]+x-1)+1,changey(p->xy[7]+y-1)+1,changex(p->xy[6]+x-1)+20-1,changey(p->xy[7]+y-1)+20-1);
}
boxdown(int* x,int* y,struct box *p)
{ int oldcolor=p->color;
p->color=0;
drawbox(*x,*y,p);
(*y)++;
p->color=oldcolor;
drawbox(*x,*y,p);
}
moveleft(int* x,int* y,struct box *p)
{ int oldcolor=p->color;
p->color=0;
drawbox(*x,*y,p);
(*x)--;
p->color=oldcolor;
drawbox(*x,*y,p);
}
moveright(int* x,int* y,struct box *p)
{ int oldcolor=p->color;
p->color=0;
drawbox(*x,*y,p);
(*x)++;
p->color=oldcolor;
drawbox(*x,*y,p);
}
changebox(int* x,int* y,struct box *p,struct box *pb)
{
int oldcolor=p->color;
p->color=0;
drawbox(*x,*y,p);
*p=pb[p->next];
if(*x+p->xy[6]-1>15){(*x)=16-p->xy[6];}
p->color=oldcolor;
drawbox(*x,*y,p);
}
printscreen(int p[21][17])
{int i,j;
setfillstyle(1,0);
bar(170,40,470,440);
setfillstyle(1,15);
for(i=19;i>=0;i--)
for(j=1;j<=15;j++) {if(p[i][j]==1) bar(changex(j)+1,changey(i+1)+1,changex(j)+20-1,changey(i+1)+20-1); }
}
int checkbottom(int x,int y,struct box *p,int pb[21][17])
{ int check=0,x1,y1,i,checkend=0;
for(i=0;i<=6;i+=2)
{y1=p->xy[i]+x-1;x1=p->xy[i+1]+y-1;if(pb[x1][y1]==1) {check++;if(x1-1==0) checkend++;}}
if(check>0&&checkend==0) return 1;
else if(checkend>0) return 2;
else return 0;
}
int checkleft(int x,int y,struct box *p,int pb[21][17])
{ int check=0,x1,y1,i;
for(i=0;i<=6;i+=2)
{y1=p->xy[i]+x-2;x1=p->xy[i+1]+y-2;if(pb[x1][y1]==1) check++; }
if(check>0) return 1;
}
int checkright(int x,int y,struct box *p,int pb[21][17])
{ int check=0,x1,y1,i;
for(i=0;i<=6;i+=2)
{y1=p->xy[i]+x;x1=p->xy[i+1]+y;if(pb[x1][y1]==1) check++; }
if(check>0) return 1;
}
cancelline(int pb[21][17])
{
int i,j,check=0;
for(i=19;i>=0;i--)
{ check=0;
for(j=1;j<=15;j++){if(pb[i][j]==1) check++; }
if(check==15)
{
cancelwrite(i,pb);
printscreen(pb);
i++;
}
}
}
cancelwrite(int i,int pb[21][17])
{ int k,l;
for(k=i;k>=1;k--)
{for(l=1;l<=15;l++) pb[k][l]=pb[k-1][l];}
mark+=10;
showmark();
}
writein(int x,int y,struct box *p,int pb[21][17])
{int x1,y1,i;
for(i=0;i<=6;i+=2)
{y1=p->xy[i]+x-1;x1=p->xy[i+1]+y-2;pb[x1][y1]=1; }
}
showmark()
{char str[4];
setfillstyle(1,0);
bar(75,160,150,200);
setfillstyle(1,15);
settextstyle(3,0,2);
outtextxy(20,180,"mark:");
sprintf(str,"%d",mark);
outtextxy(80,180,str);
}
main()
{
int i,j,x,y,onoff=1,dtime;
int driver=DETECT;
int mode;
int board[21][17];
struct box fang[20]=
{
{1,1,1,2,2,2,2,3,1,13},
{1,2,2,2,2,1,3,1,0,13},
{1,1,2,1,1,2,2,2,2,14},
{1,1,2,1,2,2,3,2,4,12},
{2,1,1,2,1,3,2,2,3,12},
{2,1,1,2,2,2,3,2,6,11},
{1,1,1,2,1,3,2,2,7,11},
{1,1,2,1,2,2,3,1,8,11},
{1,2,2,1,2,2,2,3,5,11},
{1,1,2,1,3,1,4,1,10,10},
{1,1,1,2,1,3,1,4,9,10},
{2,1,2,2,1,3,2,3,12,9},
{1,1,1,2,2,2,3,2,13,9},
{1,1,1,2,1,3,2,1,14,9},
{1,1,2,1,3,1,3,2,11,9},
{1,1,1,2,1,3,2,3,16,7},
{1,1,1,2,2,1,3,1,17,7},
{1,1,2,1,2,2,2,3,18,7},
{1,2,2,2,3,1,3,2,15,7},
{1,2,2,1,3,1,4,2,19,8}
};
struct box activebox;
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,"");/*VGAHI 16 color 640*480 */
while(onoff)
{ randomize();
mark=0;
x=5;y=1;dtime=100;activebox=fang[rand()%20];
for(i=0;i<=19;i++)
for(j=1;j<=15;j++) board[i][j]=0;
for(i=0;i<=16;i++) board[20][i]=1;
for(i=0;i<=20;i++){board[i][0]=1;board[i][16]=1;}
cleardevice();
rectangle(169,39,471,441);
showmark();
settextstyle(1,0,4);
outtextxy(140,0,"Humphrey's Box Game");
while(1)
{
if(checkbottom(x,y,&activebox,board)==0)
{ boxdown(&x,&y,&activebox); }
else if(checkbottom(x,y,&activebox,board)==1)
{ writein(x,y,&activebox,board);
printscreen(board);
cancelline(board);
x=5;y=1;activebox=fang[rand()%20];
dtime=100;
}
else break;
for(i=1;i<=dtime;i++)
{ delay(300);
if(bioskey(1)!=0)
{ key=bioskey(0);
if(key==283) break;
switch(key)
{
case 19200:if(checkleft(x,y,&activebox,board)!=1){moveleft(&x,&y,&activebox);break;} else break;
case 19712:if(checkright(x,y,&activebox,board)!=1){moveright(&x,&y,&activebox);break;} else break;
case 18432:changebox(&x,&y,&activebox,fang);break;
case 20480:dtime=0;break;
}
}
}
if(key==283) break;
}
settextstyle(1,0,4);
outtextxy(100,440,"Play Again(y) OR EXIT(n)? Y/N");
while(1)
{
while(bioskey(1)==0);
key=bioskey(0);
if(key==5497){onoff=1;break;}
else if(key==12654){onoff=0;break;}
}
}
cleardevice();
settextstyle(1,0,4);
outtextxy(230,90,"THANK YOU");
outtextxy(280,120,"FOR");
outtextxy(180,150,"PLAYING MY GAME");
delay(50000);
settextstyle(4,0,2);
outtextxy(200,250,"Write by :");
delay(20000);
outtextxy(300,250,"H u m p h r e y");
delay(60000);
closegraph();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -