Quantcast C/C++ Source Code | Prog2impress.com
Sorry! Site is Under Construction, Link Doesn't Exist.
Logo
C/C++ Projects with Source Codes

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<<ch;
                               x=ch-65;
                               }
                       }
               else if(y==-1)
               {
                       if(ch>='1' && ch<='8')
                       {
                               cout<<ch;
                               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<<ch;
                               x1=ch-65;
                       }
               }
               else if(y1==-1)
               {
                       if(ch>='1' && ch<='8')
                       {
                               cout<<ch;
                               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<x1)&&(y<y1))
               {
                       for(i=1;(i+x)<x1;i++)
                       {
                               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<y1)){
        for(i=1;(x-i)>x1;i++){
          if(board[y+i][x-i]!=0)
            a=0;
        }
        }
        else if((x<x1)&&(y>y1)){
        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<x1;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<y1;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;
}

Popular Links


BUY THE BEST

Top Pages