/*Project Name:-Chess Mania */
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include<dos.h>
struct game{
int cp[8][8][2];
int kingp[3][3];
int onep[8][8],turn;
int twop[8][8];
int checked,checkmate;
};
game n;
int p[4],goon=1,c=1;
int po[8][2];
void ffp(int x,int y)
{
floodfill(25+x,30+y,15);
floodfill(25+x,37+y,15);
floodfill(25+x,44+y,15); }
void ffk(int x,int y)
{
floodfill(25+x,40+y,15);
floodfill(25+x,3+y,15); }
void ffc(int x,int y)
{ floodfill(25+x,25+y,15); }
void ffcam(int x,int y)
{
floodfill(25+x,13+y,15);
floodfill(25+x,20+y,15);
floodfill(23+x,28+y,15);
floodfill(25+x,40+y,15);
floodfill(25+x,47+y,15); }
void ffq(int x,int y)
{
floodfill(25+x,7+y,15);
floodfill(25+x,12+y,15);
floodfill(25+x,22+y,15);
floodfill(25+x,24+y,15);
floodfill(25+x,30+y,15); }
void ffh(int x,int y)
{ floodfill(25+x,45+y,15);
}
void drawpawn(int x,int y)
{
circle(25+x,30+y,5);
line(15+x,35+y,35+x,35+y);
line(15+x,35+y,15+x,38+y);
line(35+x,35+y,35+x,38+y);
line(15+x,38+y,35+x,38+y);
arc(25+x,50+y,0,180,12);
line(13+x,50+y,37+x,50+y); }
void drawking(int x,int y)
{
line(25+x,0+y,22+x,2+y);
line(25+x,0+y,28+x,2+y);
line(22+x,2+y,25+x,5+y);
line(28+x,2+y,25+x,5+y);
line(25+x,5+y,15+x,9+y);
line(25+x,5+y,35+x,9+y);
line(15+x,9+y,21+x,15+y);
line(35+x,9+y,29+x,15+y);
line(21+x,15+y,15+x,18+y);
line(29+x,15+y,35+x,18+y);
line(15+x,18+y,15+x,20+y);
line(35+x,18+y,35+x,20+y);
line(15+x,20+y,20+x,20+y);
line(35+x,20+y,30+x,20+y);
line(20+x,20+y,18+x,40+y);
line(30+x,20+y,32+x,40+y);
line(18+x,40+y,10+x,45+y);
line(32+x,40+y,40+x,45+y);
line(10+x,45+y,13+x,48+y);
line(40+x,45+y,37+x,48+y);
line(13+x,48+y,10+x,50+y);
line(37+x,48+y,40+x,50+y);
line(10+x,50+y,40+x,50+y); }
void drawcastle(int x,int y)
{
line(15+x,50+y,35+x,50+y);
line(15+x,50+y,15+x,47+y);
line(35+x,50+y,35+x,47+y);
line(15+x,47+y,18+x,47+y);
line(35+x,47+y,32+x,47+y);
line(18+x,47+y,20+x,27+y);
line(32+x,47+y,30+x,27+y);
line(20+x,27+y,15+x,27+y);
line(30+x,27+y,35+x,27+y);
line(15+x,27+y,15+x,20+y);
line(35+x,27+y,35+x,20+y);
line(15+x,20+y,20+x,20+y);
line(35+x,20+y,30+x,20+y);
line(20+x,20+y,20+x,25+y);
line(30+x,20+y,30+x,25+y);
line(20+x,25+y,23+x,25+y);
line(30+x,25+y,27+x,25+y);
line(23+x,25+y,23+x,20+y);
line(27+x,25+y,27+x,20+y);
line(23+x,20+y,27+x,20+y); }
void drawhorse(int x,int y)
{
line(13+x,50+y,37+x,50+y);
line(13+x,50+y,22+x,34+y);
line(37+x,50+y,32+x,26+y);
line(22+x,35+y,8+x,31+y);
line(32+x,26+y,36+x,23+y);
line(36+x,23+y,31+x,20+y);
line(31+x,20+y,28+x,15+y);
line(28+x,15+y,25+x,20+y);
line(25+x,20+y,22+x,15+y);
line(22+x,15+y,19+x,20+y);
line(19+x,20+y,8+x,27+y);
line(8+x,27+y,15+x,29+y);
line(15+x,29+y,8+x,31+y);
circle(25+x,25+y,1); }
void drawcamel(int x,int y)
{
circle(25+x,13+y,2);
line(24+x,14+y,18+x,20+y);
line(26+x,14+y,32+x,20+y);
line(18+x,20+y,22+x,27+y);
line(32+x,20+y,28+x,27+y);
line(22+x,27+y,28+x,27+y);
line(22+x,27+y,22+x,30+y);
line(28+x,27+y,28+x,30+y);
line(22+x,30+y,28+x,30+y);
line(22+x,30+y,15+x,45+y);
line(28+x,30+y,35+x,45+y);
line(15+x,45+y,35+x,45+y);
line(15+x,45+y,15+x,50+y);
line(35+x,45+y,35+x,50+y);
line(15+x,50+y,35+x,50+y); }
void drawqueen(int x,int y)
{
line(10+x,50+y,40+x,50+y);
line(10+x,50+y,10+x,45+y);
line(40+x,50+y,40+x,45+y);
line(10+x,45+y,15+x,45+y);
line(40+x,45+y,35+x,45+y);
line(15+x,45+y,20+x,40+y);
line(35+x,45+y,30+x,40+y);
line(20+x,40+y,20+x,25+y);
line(30+x,40+y,30+x,25+y);
line(15+x,25+y,35+x,25+y);
line(15+x,25+y,15+x,23+y);
line(35+x,25+y,35+x,23+y);
line(15+x,23+y,35+x,23+y);
line(15+x,23+y,20+x,20+y);
line(35+x,23+y,30+x,20+y);
line(20+x,20+y,30+x,20+y);
line(20+x,20+y,20+x,15+y);
line(30+x,20+y,30+x,15+y);
line(20+x,15+y,15+x,13+y);
line(30+x,15+y,35+x,13+y);
line(15+x,13+y,15+x,10+y);
line(35+x,13+y,35+x,10+y);
line(15+x,10+y,20+x,13+y);
line(35+x,10+y,30+x,13+y);
line(20+x,13+y,24+x,8+y);
line(30+x,13+y,26+x,8+y);
circle(25+x,7+y,2); }
void drawcoin(int x,int y,int i,int j,int f)
{
if(n.cp[i][j][1]==1)
{ drawpawn(x,y);
if(f)
ffp(x,y); }
if(n.cp[i][j][1]==2)
{ drawcastle(x,y);
if(f)
ffc(x,y);
}
if(n.cp[i][j][1]==3)
{ drawhorse(x,y);
if(f)
ffh(x,y); }
if(n.cp[i][j][1]==4)
{ drawcamel(x,y);
if(f)
ffcam(x,y);}
if(n.cp[i][j][1]==5)
{ drawqueen(x,y);
if(f)
ffq(x,y); }
if(n.cp[i][j][1]==6)
{ drawking(x,y);
if(f)
ffk(x,y); }
}
void setcoins()
{
int i,j,c,x,y;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{ x=169+j*50;
y=39+i*50;
if(n.cp[i][j][0]==15&&(i+j)%2==0)//white coin and white background
{ setcolor(0);
floodfill(x+25,y+25,15);
drawcoin(x,y,i,j,0);
}
if(n.cp[i][j][0]==15&&(i+j)%2!=0) //white coin and black background
{ setcolor(15);
drawcoin(x,y,i,j,1);
}
if(n.cp[i][j][0]==0&&(i+j)%2!=0) // black coin and black background
{ setcolor(15);
drawcoin(x,y,i,j,0);
}
if(n.cp[i][j][0]==0&&(i+j)%2==0) // black coin and white background
{ setcolor(15);
drawcoin(x,y,i,j,0);
floodfill(x+5,y+5,15);
floodfill(x+45,y+5,15);
}
if(n.cp[i][j][0]==-1&&(i+j)%2==0)
{ setcolor(15);
floodfill(x+25,y+25,15);
}
}
}
void drawboard()
{ int i,j;
int xmin=169,xmax=569,ymin=39,ymax=439;
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "\\tc\\bgi\\");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
for(i=ymin;i<=ymax;i+=50)
line(xmin,i,xmax,i);
for(i=xmin;i<=xmax;i+=50)
line(i,ymin,i,ymax);
outtextxy(589,64,"eight");
outtextxy(589,114,"seven");
outtextxy(589,164,"six");
outtextxy(589,214,"five");
outtextxy(589,264,"four");
outtextxy(589,314,"three");
outtextxy(589,364,"two");
outtextxy(589,414,"one");
outtextxy(544,449,"H");
outtextxy(494,449,"G");
outtextxy(444,449,"F");
outtextxy(394,449,"E");
outtextxy(344,449,"D");
outtextxy(294,449,"C");
outtextxy(244,449,"B");
outtextxy(194,449,"A");
setcoins();
if(n.turn==1)
c=8;
else
c=1;
setfillstyle(CLOSE_DOT_FILL,c);
floodfill(50,50,15);
}
void givevalue()
{
int i,j;
for(i=0;i<8;i++) //making all null
for(j=0;j<8;j++)
n.cp[j][i][0]=-1;
for(i=0;i<8;i++) //giving color to coins
for(j=0;j<2;j++)
n.cp[j][i][0]=0;
for(i=0;i<8;i++)
for(j=6;j<8;j++)
n.cp[j][i][0]=15;
for(i=0;i<8;i++) // placing the coins on the board
for(j=0;j<8;j++) //starting positons
{ n.cp[j][i][1]=-1;
if(j==1||j==6)
n.cp[j][i][1]=1;
if((j==0||j==7)&&(i==0||i==7))
n.cp[j][i][1]=2;
if((j==0||j==7)&&(i==1||i==6))
n.cp[j][i][1]=3;
if((j==0||j==7)&&(i==2||i==5))
n.cp[j][i][1]=4;
if((j==0||j==7)&&i==3)
n.cp[j][i][1]=5;
if((j==0||j==7)&&i==4)
n.cp[j][i][1]=6;
}
}
void open()
{
FILE *fp;
fp=fopen("save.txt","r");
printf("\n\n\t\t\t");
if(fp==NULL)
cprintf("Cannot open file");
else
{ fread(&n,sizeof(n),1,fp);
drawboard();
}
}
void leaf(int f)
{
int gdriver = DETECT, gmode, errorcode,i;
initgraph(&gdriver, &gmode, "\\tc\\bgi\\");
arc(370,540,120,160,330);
arc(260,540,20,60,330);
//first leaf
line(80,385,90,315);
line(90,315,95,330);
line(95,330,120,275);
line(120,275,120,293);
line(120,293,155,250);
line(155,250,150,270);
line(150,270,187,233);
line(187,233,183,250);
line(183,250,251,226);
line(251,226,196,277);
line(196,277,208,280);
line(208,280,164,301);
line(164,301,177,305);
line(177,305,135,330);
line(135,330,148,331);
line(148,331,113,356);
line(113,356,126,356);
line(126,356,80,383);
//right leaf
line(550,380,500,360);
line(500,360,515,357);
line(515,357,470,333);
line(470,333,483,332);
line(483,332,440,304);
line(440,304,454,304);
line(454,304,414,277);
line(414,277,432,279);
line(432,279,372,225);
line(372,225,445,245);
line(445,245,438,230);
line(438,230,478,266);
line(478,266,473,250);
line(473,250,511,298);
line(511,298,508,283);
line(508,283,535,331);
line(535,331,535,315);
line(535,315,550,380);
setfillstyle(3,2);
floodfill(440,250,15);
floodfill(90,350,15);
//king
int x=79,y=50,x1=3,y1=4;
line((25+x)*x1,(0+y)*y1,(25+x)*x1,(50+y)*y1);
line((25+x)*x1,(0+y)*y1,(22+x)*x1,(2+y)*y1);
line((25+x)*x1,(0+y)*y1,(28+x)*x1,(2+y)*y1);
line((22+x)*x1,(2+y)*y1,(25+x)*x1,(5+y)*y1);
line((28+x)*x1,(2+y)*y1,(25+x)*x1,(5+y)*y1);
line((25+x)*x1,(5+y)*y1,(15+x)*x1,(9+y)*y1);
line((25+x)*x1,(5+y)*y1,(35+x)*x1,(9+y)*y1);
line((15+x)*x1,(9+y)*y1,(21+x)*x1,(15+y)*y1);
line((35+x)*x1,(9+y)*y1,(29+x)*x1,(15+y)*y1);
line((21+x)*x1,(15+y)*y1,(15+x)*x1,(18+y)*y1);
line((29+x)*x1,(15+y)*y1,(35+x)*x1,(18+y)*y1);
line((15+x)*x1,(18+y)*y1,(15+x)*x1,(20+y)*y1);
line((35+x)*x1,(18+y)*y1,(35+x)*x1,(20+y)*y1);
line((15+x)*x1,(20+y)*y1,(20+x)*x1,(20+y)*y1);
line((35+x)*x1,(20+y)*y1,(30+x)*x1,(20+y)*y1);
line((20+x)*x1,(20+y)*y1,(18+x)*x1,(40+y)*y1);
line((30+x)*x1,(20+y)*y1,(32+x)*x1,(40+y)*y1);
line((18+x)*x1,(40+y)*y1,(10+x)*x1,(45+y)*y1);
line((32+x)*x1,(40+y)*y1,(40+x)*x1,(45+y)*y1);
line((10+x)*x1,(45+y)*y1,(13+x)*x1,(48+y)*y1);
line((40+x)*x1,(45+y)*y1,(37+x)*x1,(48+y)*y1);
line((13+x)*x1,(48+y)*y1,(10+x)*x1,(50+y)*y1);
line((37+x)*x1,(48+y)*y1,(40+x)*x1,(50+y)*y1);
line((10+x)*x1,(50+y)*y1,(40+x)*x1,(50+y)*y1);
setfillstyle(1,15);
floodfill((21+x)*x1,(40+y)*y1,15);
floodfill((23+x)*x1,(3+y)*y1,15);
setfillstyle(CLOSE_DOT_FILL,8);
floodfill(50,50,15);
printf("\n====================================Creators====================================");
printf("\n DERRICK====================SHRUTI ");
if(f)
{
printf("\n THANK YOU FOR PLAYING CHESS MANIA ");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\n================================================================================");
}
else{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\n================================================================================");
} delay(3500);
closegraph();
}
void openmenu()
{
clrscr();
textcolor(CYAN + BLINK);
printf("\n\n\n\n\n \t\t\t");
cprintf("Welcome_to_Chess_Mania");
textcolor(CYAN );
printf("\n\n\t\t\t");
cprintf(" Hit Enter to play");
printf("\n\n\t\t\t");
cprintf(" Hit Esc to exit");
int a;
if(getch()==27)
{exit(0);
}
else
{ clrscr();
printf("\n\n");
printf("\n\n\t\t\t");
cprintf("Start new game hit enter");
printf("\n\n\t\t\t");
cprintf(" Load saved game hit L");
printf("\n\n\t\t\t");
cprintf(" Hit Esc to exit");