Search my Blog

Showing posts with label C PRogramming. Show all posts
Showing posts with label C PRogramming. Show all posts

Saturday, February 18, 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;
}


Comment Below

Related Posts Plugin for WordPress, Blogger...

ShareThis