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

📄 russia2.c

📁 一个由c语言编程的一些小游戏
💻 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 + -