c语言图形小游戏(黑白棋)

发表于:2007-04-28来源:作者:点击数: 标签:黑白棋#includes图形小游戏语言
#includes td io.h #includegraphics.h #define H (y-100)/10 #define L (x-100)/10 int Mark[20][20]; int Change=2; void InitMark() {int i,j; for(i=0;i20;i++) for(j=0;j20;j++) Mark[i][j]=0; } void Screen() {int i; settextstyle(0, 0, 2); outtext

#include<stdio.h>
#include<graphics.h>
#define H (y-100)/10
#define L (x-100)/10
int Mark[20][20];
int Change=2;

void InitMark()
{int i,j;
 for(i=0;i<20;i++)
  for(j=0;j<20;j++)
   Mark[i][j]=0;
}
void Screen()
{int i;
 settextstyle(0, 0, 2);
 outtextxy(50,50,"BLACK WHITE CHESS");
 settextstyle(0,0,1);
 outtextxy(4,354,"ESC -->OVER!!");
 outtextxy(4,364,"A   -->Try Again!!");
 setcolor(1);
 rectangle(100,100,300,300);
 rectangle(1,350,170,450);
 for(i=1;i<21;i++)
 {line(100+10*i,100,100+10*i,300);
  line(100,100+10*i,300,100+10*i);
 }
}
void PicBlock(int x,int y)
{if(Change==1) setcolor(RED);
  else setcolor(YELLOW);
 line(x+1,y+1,x+1,y+3);line(x+9,y+1,x+9,y+3);
 line(x+1,y+9,x+1,y+7);line(x+9,y+9,x+9,y+7);
 line(x+1,y+1,x+3,y+1);line(x+1,y+9,x+3,y+9);
 line(x+9,y+1,x+7,y+1);line(x+9,y+9,x+7,y+9);
}
void CoverBlock(int x,int y)
{setcolor(BLACK);
 line(x+1,y+1,x+1,y+3);line(x+9,y+1,x+9,y+3);
 line(x+1,y+9,x+1,y+7);line(x+9,y+9,x+9,y+7);
 line(x+1,y+1,x+3,y+1);line(x+1,y+9,x+3,y+9);
 line(x+9,y+1,x+7,y+1);line(x+9,y+9,x+7,y+9);
}
void DrawBlack(int x,int y)
{
 setcolor(RED);
 line(x+5,y+3,x+2,y+7);
 line(x+2,y+7,x+8,y+7);
 line(x+8,y+7,x+5,y+3);
}
void DrawWhite(int x,int y)
{setcolor(YELLOW);
 circle(x+5,y+5,3);
}
void CoverPic(int x,int y)
{setfillstyle(1,BLACK);
 bar(x+2,y+2,x+8,y+8);
}
void Score()
{int i,j,M,a,b;
 a=0;b=0;
 DrawBlack(370,198);
 DrawWhite(370,219);
 setfillstyle(1,BLACK);
 bar(419,189,449,229);
 setcolor(WHITE);
 rectangle(350,170,450,230);
 settextstyle(0, 0, 1);
 outtextxy(352,190,"Play  I:");
 outtextxy(352,200,"VS");
 outtextxy(352,210,"Play II:");
 for(i=0;i<20;i++)
  for(j=0;j<20;j++)
  { if(Mark[i][j]==1) a++;
    if(Mark[i][j]==2) b++;
  }
 j=0;
 M=a;
 for(i=0;i<2;i++)
 {
 switch (M/100)
    {case 0:outtextxy(420,190+20*j,"0");break;
     case 1:outtextxy(420,190+20*j,"1");break;
     case 2:outtextxy(420,190+20*j,"2");break;
     case 3:outtextxy(420,190+20*j,"3");break;
     case 4:outtextxy(420,190+20*j,"4");break;
   }
 switch (M%100/10)
 {case 0:outtextxy(430,190+20*j,"0");break;
  case 1:outtextxy(430,190+20*j,"1");break;
  case 2:outtextxy(430,190+20*j,"2");break;
  case 3:outtextxy(430,190+20*j,"3");break;
  case 4:outtextxy(430,190+20*j,"4");break;
  case 5:outtextxy(430,190+20*j,"5");break;
  case 6:outtextxy(430,190+20*j,"6");break;
  case 7:outtextxy(430,190+20*j,"7");break;
  case 8:outtextxy(430,190+20*j,"8");break;
  case 9:outtextxy(430,190+20*j,"9");break;
 }
 switch (M%10)
 {case 0:outtextxy(440,190+20*j,"0");break;
  case 1:outtextxy(440,190+20*j,"1");break;
  case 2:outtextxy(440,190+20*j,"2");break;
  case 3:outtextxy(440,190+20*j,"3");break;
  case 4:outtextxy(440,190+20*j,"4");break;
  case 5:outtextxy(440,190+20*j,"5");break;
  case 6:outtextxy(440,190+20*j,"6");break;
  case 7:outtextxy(440,190+20*j,"7");break;
  case 8:outtextxy(440,190+20*j,"8");break;
  case 9:outtextxy(440,190+20*j,"9");break;
 }
 M=b;j++;
 }
}
void MoveBlock(int x,int y)
{int k,Counter;
 Counter=0;/*record the path walk*/
 while(1)
 {k=getch();
  if(k==77&&x<290) {CoverBlock(x,y);x+=10;PicBlock(x,y);}
  else if(k==75&&x>100) {CoverBlock(x,y);x-=10;PicBlock(x,y);}
       else if(k==72&&y>100) {CoverBlock(x,y);y-=10;PicBlock(x,y);}
     else if(k==80&&y<290) {CoverBlock(x,y);y+=10;PicBlock(x,y);}
   else if(k==13&&Mark[H][L]==0)
   {Counter=PreControl(x,y);
   if(Change==1&&Counter)
      {DrawBlack(x,y);
       Mark[H][L]=1;
       AftControl(Counter,x,y);
       Change++;Counter=0;
       Score();
      }
     else if(Change==2&&Counter)
     {DrawWhite(x,y);
      Mark[H][L]=2;
      AftControl(Counter,x,y);
      Change--;Counter=0;
      Score();
     }
    }
   else if(k==27) break;
  delay(1000);
  }
}
int  PreControl(int x,int y)
{int TT,X,Y;
 int T;
 T=0;TT=1;X=x;Y=y;
 while(x<290)/*right*/
 {x+=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1) {T+=1;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(x<290&&y>100)/*right and up*/
 {x+=10;y-=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1) {T+=2;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(y>100) /*up*/
 {y-=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1){T+=4;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(x>100&&y>100) /*up and left*/
 {x-=10;y-=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1){T+=8;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(x>100)/*left*/
 {x-=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1){T+=16;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(x>100&&y<290)/*left and down*/
 {x-=10;y+=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1){T+=32;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(y<290)/*down*/
 {y+=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1){T+=64;break;}
  TT++;
 }
 TT=1;x=X;y=Y;
 while(x<290&&y<290)/*down and right*/
 {x+=10;y+=10;
  if(Mark[H][L]==0||(Mark[H][L]==Change&&TT==1)) break;
  if(Mark[H][L]==Change&&TT!=1) {T+=128;break;}
  TT++;
 }
 return T;
}
int AftControl(int Counter,int x,int y)
{int X,Y;
 X=x;Y=y;
 if(Counter-128>=0)
 {Counter-=128;
  x+=10;y+=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x+=10;y+=10;
  }
 }
x=X;y=Y;
 if(Counter-64>=0)
 {Counter-=64;
  y+=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   y+=10;
  }
 }
x=X;y=Y;
 if(Counter-32>=0)
 {Counter-=32;
  x-=10;y+=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x-=10;y+=10;
  }
 }
x=X;y=Y;
 if(Counter-16>=0)
 {Counter-=16;
  x-=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x-=10;
  }
 }
x=X;y=Y;
 if(Counter-8>=0)
 {Counter-=8;
  x-=10;y-=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x-=10;y-=10;
  }
 }
x=X;y=Y;
 if(Counter-4>=0)
 {Counter-=4;
  y-=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   y-=10;
  }
 }
x=X;y=Y;
 if(Counter-2>=0)
 {Counter-=2;
  x+=10;y-=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x+=10;y-=10;
  }
 }
x=X;y=Y;
 if(Counter-1>=0)
 {Counter-=1;
  x+=10;
  while(Mark[H][L]!=Change)
  {CoverPic(x,y);
   if(Change==1) DrawBlack(x,y);
   else DrawWhite(x,y);
   Mark[H][L]=Change;
   x+=10;
  }
 }
 if(Counter==0) outtextxy(100,320,"ok!");
 else outtextxy(350,100,"wrong!");

}
void main()
{int gd,gm;
 gd=DETECT;
 initgraph(&gd,&gm,"");
 Screen();
 DrawBlack(190,200);Mark[10][9]=1;
 DrawWhite(200,200);Mark[10][10]=2;
 DrawBlack(200,210);Mark[11][10]=1;
 Score();
 PicBlock(200,200);
 MoveBlock(200,200);
 InitMark();
 closegraph();
}



原文转自:http://www.ltesting.net