Code:
class Cell
{
public:
int x,y,size,color;
Figure *figure;
Cell(int cx=0,int cy=0,int cl=LIGHTGRAY,int csize=40)
{
x=cx;
y=cy;
color=cl;
size=csize;
figure=NULL;
}
void showC()
{
setfillstyle(1,color);
bar(x,y,x+size,y+size);
if (figure!=NULL)
figure->draw();
}
int getcolor()
{
return color;
}
};
class Field
{
protected:
int x,y,size;
Cell f[8][8];
Chose *rama;
Figure *figure;
public:
Field(int fx,int fy,int fsize=400)
{
x=fx;
y=fy;
size=fsize;
int sc=size/8;
if(size%8!=0)
size=sc*8;
rama=NULL;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if((i+j)%2==0)
f[i][j]=Cell(j*sc,i*sc,LIGHTGRAY,sc);
else
f[i][j]=Cell(j*sc,i*sc,DARKGRAY,sc);
}
}
f[0][0].figure=new Rook(BLACK,20,15);
f[0][1].figure=new Horse(BLACK,70,15);
f[0][2].figure=new Bishop(BLACK,120,15);
f[0][3].figure=new King(BLACK,170,15);
f[0][4].figure=new Queen(BLACK,220,15);
f[0][5].figure=new Bishop(BLACK,270,15);
f[0][6].figure=new Horse(BLACK,320,15);
f[0][7].figure=new Rook(BLACK,370,15);
f[7][0].figure=new Rook(WHITE,20,365);
f[7][1].figure=new Horse(WHITE,70,365);
f[7][2].figure=new Bishop(WHITE,120,365);
f[7][3].figure=new Queen(WHITE,170,365);
f[7][4].figure=new King(WHITE,220,365);
f[7][5].figure=new Bishop(WHITE,270,365);
f[7][6].figure=new Horse(WHITE,320,365);
f[7][7].figure=new Rook(WHITE,370,365);
for (int i=0;i<8;i++)
{
x=20+sc*i;
f[1][i].figure=new Pawn(BLACK,x,55);
f[6][i].figure=new Pawn(WHITE,x,305);
}
rama=new Chose(5,5,45,45);
}
void Show()
{
x=0;y=0;
rectangle(x,y,x+size,y+size);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
f[i][j].showC();
}
rama->dChose();
}
void Data(data &mes)
{
mes.color=f[rama->y / rama->size][rama->x / rama->size].getcolor();
switch(mes.code)
{
case 0: if(f[rama->y / rama->size][rama->x / rama->size].figure!=NULL )
{
mes.i=rama->x;
mes.j=rama->y;
mes.code=1; break;
}
case 1: if(getch()==13)
{
mes.desti=rama->x;
mes.destj=rama->y;
if(f[mes.j / rama->size][mes.i / rama->size].figure->IsLegalMove(mes.i,mes.j,mes.desti,mes.destj)==1)
moveto(mes);
mes.code=2;
break;
}
}
}
void moveto(data &mes)
{
f[mes.destj / rama->size][mes.desti / rama->size].figure=f[mes.j / rama->size][mes.i / rama->size].figure;
f[mes.destj / rama->size][mes.desti / rama->size].showC();
f[mes.j / rama->size][mes.i / rama->size].figure=NULL;
f[mes.j / rama->size][mes.i / rama->size].showC();
}
};