Tuesday, January 17, 2012

Chess Game (Mini Project in C )

C_Projects Source Codes List | Source Code Home
Program : Chess Game Developed in C .
/*
Language: C\C++
Category: Games
Description: It is chess. Two players can play it. \
To simplify the code i have not intriduced the mouse.\
We can play it using Keyboard.I have made this using \
general rules.
*/

#include graphics.h
#include stdlib.h
#include stdio.h
#include iostream.h
#include conio.h
#include ctype.h //For toupper
#include dos.h                //For Delay

int board[8][8],turn=0,count1=0,count2=0;
int gameover();
char strFileName[15];
void printboard();
void wrongStart();
void initialize();
void cleartext();
void check();

//Prototypes
int pawn(int x,int y,int x1,int y1);
int horse(int x,int y,int x1,int y1);
int rook(int x,int y,int x1,int y1);
int bishop(int x,int y,int x1,int y1);
int queen(int x,int y,int x1,int y1);
int king(int x,int y,int x1,int y1);

void main()
{

//Graphics Initialization
int gdriver = DETECT;
int gmode;
initgraph(&gdriver,&gmode,"e:\\borlandc\\bgi");

//Loading Intro
for(float i=0; i<=6;i=i+0.1)
{
setcolor(12);
settextstyle(4,HORIZ_DIR,i);
outtextxy(50,120,"WELCOME TO THE CHESS");
delay(30);
cleardevice();
}
outtextxy(50,120,"WELCOME TO THE CHESS");
settextstyle(1,HORIZ_DIR,3);
getch();
cleardevice();

//Displaying Group Members
setcolor(CYAN);
outtextxy(50,220,"Designed by:");
setcolor(6);
outtextxy(50,250,"Atif Zia Khan");

//Displaying Roll Numbers
outtextxy(350,250,"L1F01BSCS0144");
getch();
cleardevice();
cleardevice();

settextstyle(1,HORIZ_DIR,2);
setcolor(12);
outtextxy(50,10,"During the game Press:\n");
outtextxy(50,10,"______________________\n");


setcolor(6);
settextstyle(1,HORIZ_DIR,1.5);
outtextxy(50,60,"F2 to save file\n");
outtextxy(50,80,"F3 to load file\n");
outtextxy(50,100,"ESC to exit game\n");
outtextxy(50,120,"U to undo selection\n");
outtextxy(50,200,"\nPress any key to play ");
getch();
cleardevice();


cleartext();
initialize();
char ch;
int x=-1,y=-1,x1=-1,y1=-1;
setcolor(9);
outtextxy(10,400,"Player 1");
for(;;)
{
       int game;
 game=gameover();
   if(game==0)
   {
 break;
   }
FILE *fp;
ch=getch();
if(ch==0){
 ch=getch();
if(ch=='<'){


     //////SAVE/////

  for(;;)
  {
      
cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
\b\b\bEnter File name to save \n";
cin>>strFileName;  //Enter File Name
fp=fopen(strFileName,"r+");
if(fp!=NULL)
{
cout<<"File already exist\n";
}
else
{
   fp=fopen(strFileName,"w+");
   if(fp==NULL)
   {
   cout<<"Invalid File Name\n";
   }
   else
break;
}
  }//end for
fprintf(fp,"%d\n",turn);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
  {
fprintf(fp,"%d\n",board[i][j]);
  }
}
fclose(fp);
cleartext();
x=-1;
y=-1;
x1=-1;
y1=-1;
continue;
}

if(ch=='=')
{
////Load/////


for(;;)
{

cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
\b\b\b\b\bEnter File name to Load \n";
  cin>>strFileName;
  fp=fopen(strFileName,"r+");
   if(fp==NULL)
   {
 cout<<"File does not exist\n";
   }
   else
   {
break;
   }
}//end for
 fscanf(fp,"%d",&turn);
   for(int i=0;i<8;i++){
     for(int j=0;j<8;j++){
       fscanf(fp,"%d",&board[i][j]);
}
}
fclose(fp);
printboard();
cleartext();
x=-1;
y=-1;
x1=-1;
y1=-1;
setcolor(0);
outtextxy(10,400,"Player Û");
if(turn!=0){
check();
setcolor(2);
outtextxy(10,400,"Player 2");
}
else{
check();
setcolor(9);
outtextxy(10,400,"Player 1");
}
  continue;
  }
}

if(ch==27){
break;
}
else if(ch=='u'||ch=='U'){
x=-1;
x1=-1;
y1=-1;
y=-1;
cleartext();
continue;
}
if(x==-1){
ch=toupper(ch);
if(ch>=65 && ch<=72){
cout<
x=ch-65;
}
}
else if(y==-1)
{
if(ch>='1' && ch<='8')
{
cout<
y=ch-'1';
if(board[y][x]==0){
wrongStart();
x=-1;
y=-1;
}
else
{
if(turn==0)
{
if(board[y][x]<0)   
  //if Player 1 has selected a piece of Player 2
{
wrongStart();
x=-1;
y=-1;
}
}
else if(turn!=0)
{
if(board[y][x]>0)
{
wrongStart();
x=-1;
y=-1;
}
}
}
}
if(x!=-1 && y!=-1)
cout<<"\nenter final position  ¯ ";
}
else if(x1==-1)
{ //Converting lower to upper case

ch=toupper(ch);
if(ch>=65 && ch<=72)
{
cout<
x1=ch-65;
}
}
else if(y1==-1)
{
if(ch>='1' && ch<='8')
{
cout<
y1=ch-'1';
}
int b=0,killed=0;

/////pawn/////

     if(abs(board[y][x])>=9 &&
abs(board[y][x])<=16){ //if piece selscted has value greater than 8
and less than 17
b = pawn(x,y,x1,y1);
}//end pawn

//////horse//////

      else if(abs(board[y][x])==2 ||
abs(board[y][x])==7){    //if piece selscted has value 2 and 7
b = horse(x,y,x1,y1);
}//end horse

////queen///

      else if(abs(board[y][x])==4){ ////if piece
selscted has value 4
b = queen(x,y,x1,y1);
}//end queen
///king///

      else if(abs(board[y][x])==5){ //if piece
selscted has value 5
b = king(x,y,x1,y1);
 }//end king

///rook///

      else if(abs(board[y][x])==1 ||
abs(board[y][x])==8){    //if piece selscted has value 1 and 8
b = rook(x,y,x1,y1);
}//end rook

///bishop///

      else if(abs(board[y][x])==3 ||
abs(board[y][x])==6){    //if piece selscted has value 3 and 6
b = bishop(x,y,x1,y1);
}//end bishop

if(b==2){
  if(abs(board[y][x])>=9 && abs(board[y][x])<=16){
     char pp;
   
cout<<"\n\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
\bwhich piece Q,R,H,B";
      pp=getch();
      if(turn==0){
       if(pp=='r')
board[y1][x1]=1;
       else if(pp=='h')
board[y1][x1]=2;
       else if(pp=='b')
board[y1][x1]=3;
       else if(pp=='q')
board[y1][x1]=4;
       }
      else{
       if(pp=='r')
board[y1][x1]=-1;
       else if(pp=='h')
board[y1][x1]=-2;
       else if(pp=='r')
board[y1][x1]=-3;
       else if(pp=='q')
board[y1][x1]=-4;
}

       board[y][x]=0;
       killed =1;
}
  else if(abs(board[y][x])==5){
     if(board[y][x]==5){
       if(count1==1);
 wrongStart();}
     else if(board[y][x]==-5){
       if(count1==1);
 wrongStart();}
     else{
       board[y][x+1]=board[y1][x1];
       board[y][x+2]=board[y][x];
       board[y1][x1]=0;
       board[y][x]=0;
       killed=1;
}
}
      printboard();
     }
else if(b==1)
{
if(turn==0)
{
if(board[y1][x1]<0)
{
board[y1][x1]=board[y][x];
board[y][x] = 0;
killed=1;
}
}
if(turn!=0)
{
if(board[y1][x1]>0)
{
board[y1][x1]=board[y][x];
board[y][x] = 0;
killed=1;
}
}
if(board[y1][x1]==0)
{
int temp=board[y][x];
board[y][x]=board[y1][x1];
board[y1][x1]=temp;
killed=1;
}
printboard();
}
x=-1;
y=-1;
x1=-1;
y1=-1;
      setcolor(0);
      outtextxy(30,340,"Check");
if(killed==0){
wrongStart();
continue;
}
cleartext();
setcolor(0);
outtextxy(10,400,"Player Û");
if(turn==0){
check();
turn=1;
setcolor(2);
outtextxy(10,400,"Player 2");
}
else{
check();
turn=0;
setcolor(9);
outtextxy(10,400,"Player 1");
}
}//end legal move
}//end for
}//end main

void printboard(){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if((i+j)%2==0)
setcolor(WHITE);
else
setcolor(BLACK);

outtextxy(270+(j*45),105+(i*45),"ÛÛ");


if(board[i][j]<0)
setcolor(GREEN);
else if(board[i][j]>0)
setcolor(9);

if(abs(board[i][j])>=9 && abs(board[i][j])<=16){
  outtextxy(270+(j*45),105+(i*45),"P");}

else if(abs(board[i][j])==1 || abs(board[i][j])==8){
  outtextxy(270+(j*45),105+(i*45),"R");}

else if(abs(board[i][j])==2 || abs(board[i][j])==7){
  outtextxy(270+(j*45),105+(i*45),"H");
  }
else if(abs(board[i][j])==3 || abs(board[i][j])==6){
  outtextxy(270+(j*45),105+(i*45),"B");
  }
else if(abs(board[i][j])==4){
  outtextxy(270+(j*45),105+(i*45),"Q");
  }
else if(abs(board[i][j])==5){
  outtextxy(270+(j*45),105+(i*45),"K");
  }
}
}
}
void wrongStart()
{
cout<<"\nWrong Input\nPress any key to continue...";
char ch=getch();
if(ch==0){
getch();
}
for(int i=1;i<=30;i++)
for(int j=1;j<=4;j++)
{
gotoxy(i,j);
cout<<" ";
}
gotoxy(1,1);
cout<<"enter initial position ¯ ";
}

/////ClearText////void cleartext(){
for(int i=1;i<=27;i++)
for(int j=1;j<=8;j++){
gotoxy(i,j);
cout<<" ";
}
gotoxy(1,1);
cout<<"enter initial position ¯ ";
}

/////Initialize////

void initialize(){
  setcolor(WHITE);
  rectangle(250,90,610,450);

  // Board Printing
  for (int i=250;i<560;i+=90)
for (int j=90;j<450;j+=90)
 {
 bar(i,j,i+45,j+45);
 bar(i+45,j+45,i+90,j+90);
 }

   //Asigning the Values in the empty spaces
   for(i=2;i<=5;i++)
for(int j=0;j<=7;j++)
 board[i][j] = 0;

for(int j=0;j<=7;j++)
{
 board[0][j] = j+1;
 board[1][j] = j+9;      //Pawns for player 1
 board[7][j] = 0-(j+1);
 board[6][j] = 0-(j+9);  //Pawns for player 2
 }
printboard();

setcolor(YELLOW);

  outtextxy(265,55,"A");
  outtextxy(310,55,"B");
  outtextxy(355,55,"C");
  outtextxy(400,55,"D");
  outtextxy(445,55,"E");
  outtextxy(490,55,"F");
  outtextxy(535,55,"G");
  outtextxy(580,55,"H");

  outtextxy(220,105,"1");
  outtextxy(220,150,"2");
  outtextxy(220,195,"3");
  outtextxy(220,240,"4");
  outtextxy(220,285,"5");
  outtextxy(220,330,"6");
  outtextxy(220,375,"7");
  outtextxy(220,420,"8");
}


////HORSE//////

int horse(int x,int y,int x1,int y1)
{
int a=0;
if((y1==y+2 && x1==x+1)||(y1==y+2 && x1==x-1)||(y1==y+1 &&
x1==x+2)||(y1==y+1 && x1==x-2)||(y1==y-1 && x1==x+2)||(y1==y-1 &&
x1==x-2)||(y1==y-2 && x1==x+1)||(y1==y-2 && x1==x-1)){
a = 1;
}
return a;
}

/////KING////

int king(int x,int y,int x1,int y1)
{
     int a = 0;
     if((y1==y+1 && x1==x)||(y1==y-1 && x1==x)||(y1==y+1 &&
x1==x+1)||(y1==y+1 && x1==x-1)||(y1==y-1 && x1==x+1)||(y1==y-1 &&
x1==x-1)||(y1==y && x1==x+1)||(y1==y && x1==x-1)){
a = 1;
}
/////CASTLING//////

     else
if(board[y][x+1]==0&&board[y][x+2]==0&&(abs(board[y1][x1])
==abs(board[y][x+3])==1||abs(board[y1][x1])==
abs(board[y][x+3])==8)){

      return 2;
     }
if(a==1)
{
 if(board[y][x]==5)
 count1=1;
 if(board[y][x]==-5)
 count2=1;
}
return a;
}

//////BISHOP/////

int bishop(int x,int y,int x1,int y1)
{
int a=1,i;
if(abs(x1-x)!=abs(y1-y))
{
a=0;
}

if((x
{
for(i=1;(i+x)
{
 if(board[y+i][x+i]!=0)
 a=0;
}
}

       else if((x>x1)&&(y>y1)){
for(i=1;(x-i)>x1;i++){
 if(board[y-i][x-i]!=0)
    a=0;
 }
}
else if((x>x1)&&(y
 for(i=1;(x-i)>x1;i++){
  if(board[y+i][x-i]!=0)
    a=0;
 }
}
else if((xy1)){
for(i=1;(y-i)>y1;i++){
 if(board[y-i][x+i]!=0)
    a=0;
 }
}
return a;
}


////////QUEEN///////
int queen(int x,int y,int x1,int y1){
   if(x==x1||y==y1){              
  //if queen moves in + direction
 return rook(x,y,x1,y1);
   }
   else if(abs(x1-x)==abs(y-y1)){
  //if queen moves in diagnol
direction
 return bishop(x,y,x1,y1);
   }
   else
 return 0;
}


///ROOK////
int rook(int x,int y,int x1,int y1){
int a=1;
if(y1==y)
{
for(int i=x+1;i
{
if(board[y1][i]!=0)
{
a = 0;
break;
}
}
for(i=x-1;i>x1;i--)
{
if(board[y1][i]!=0)
{
a = 0;
break;
}
}
}
else if(x1==x)
{
for(int i=y+1;i
{
if(board[i][x1]!=0)
{
a = 0;
break;
}
}
for(i=y-1;i>y1;i--)
{
if(board[i][x1]!=0)
{
a = 0;
break;
}
}
}
else
{
a=0;
}
return a;
}


///PAWN/////
int pawn(int x,int y,int x1,int y1){
int a=0;
if(turn==0){
if(y==1){
  if(y1==(y+2) && x1==x){
if(board[y1][x1]==0&&board[y+1][x]==0){
a = 1;
   }
}
}
 if(y1==y+1 && x1==x){
if(board[y1][x1]==0){
a = 1;
}
 }
   else if(y1==(y+1) && (x1==(x+1)||x1==(x-1))){
   if(board[y1][x1]<0){
 a = 1;
 }
  }
}
  else if(turn==1){
if(y==6){
   if( y1==(y-2) && x1==x){
if(board[y1][x1]==0&&board[y-1][x]==0){
a = 1;
   }
}
      }
  if( y1==(y-1) && x1==x){
if(board[y1][x1]==0){
a = 1;
}
 }
   else if(y1==(y-1) && (x1==(x-1)||x1==(x+1))){
   if(board[y1][x1]>0){
 a = 1;
 }
  }
 }
   if(a==1)
   {
     if(turn==0)
     {
 if(y1==7)
 return 2;
     }
     else
     {
if(y1==0)
return 2;
     }
    }
 return a;
}

////////Check////////


void check()
{
  int t=0,i,j,x1,y1;
   if(turn==0){
     for(i=0;i<=7;i++)
     {
 for(j=0;j<=7;j++)
 {
if(board[i][j]==-5)
{
 y1=i; x1=j;
  break;
}
  }
     }
       for(j=0;j<=7;j++){
for(i=0;i<=7;i++){
 if (t==1){
    setcolor(9);
    rectangle(20,335,100,365);
    outtextxy(30,340,"Check");
    break;
   }

 if(board[j][i]>=9 && board[j][i]<=16)
t = pawn(i,j,x1,y1);
 else if(board[j][i]==2 || board[j][i]==7)
t = horse(i,j,x1,y1);
 else if(board[j][i]==4)
t = queen(i,j,x1,y1);
 else if(board[j][i]==1 || board[j][i]==8)
t = rook(i,j,x1,y1);
 else if(board[j][i]==3 || board[j][i]==6)
t = bishop(i,j,x1,y1);

}// for
       }//  for
     }//endif turn
    else {
     for(i=0;i<=7;i++){
      for(j=0;j<=7;j++){
       if(board[i][j]==5){
 y1=i; x1=j;
  break;
      }
  }
       }
       for(j=0;j<=7;j++){
for(i=0;i<=7;i++){
 if (t==1){
    setcolor(GREEN);
     rectangle(20,335,100,365);
    outtextxy(30,340,"Check");
    break;
   }

 if(board[j][i]>=(-9) && board[j][i]<=(-16))
t = pawn(i,j,x1,y1);
 else if(board[j][i]==(-2) || board[j][i]==(-7))
t = horse(i,j,x1,y1);
 else if(board[j][i]==(-4))
t = queen(i,j,x1,y1);
 else if(board[j][i]==(-1) || board[j][i]==(-8))
t = rook(i,j,x1,y1);
 else if(board[j][i]==(-3) || board[j][i]==(-6))
t = bishop(i,j,x1,y1);

}// for
       }//  for
 }// end else
}


//////GAME OVER/////
int gameover(){
int i,j,a=0,b=0;

for(i=0;i<=7;i++)
{
for(j=0;j<=7;j++)
{
       if(board[i][j]==5)
       b=1;
       if(board[i][j]==-5)
       a=1;
}
}
if(b==0)
{
       setcolor(12);
       outtextxy(30,340,"Game Over");
               setcolor(GREEN);
       outtextxy(30,300,"Player 1 Loses");
       getch();
       return 0;
}
else if(a==0)
{
setcolor(9);
outtextxy(30,340,"Game Over");
outtextxy(30,300,"Player 2 Loses");
getch();
return 0;
}
return 1;
}

2 comments:

Anonymous said...

code is not working . plz help me.

assignments web said...

Nice and informative Blog regarding School Assignments Online this is really helpful for people who interested in Online Education. Thanks and Keep Continue to share useful information with us.

Flag counter

free counters