#include <graphics.h>
int tile=2;
void image(int tr,int tc,int dr,int dc,int size){
int i,j;
for(i=tc;i<=size;i++){
setcolor(1);
line(tc,tc+30*i,tc+size*30,tc+30*i);
}
for(j=tr;j<=size;j++){
setcolor(1);
line(tr+30*j,tr,tr+30*j,tr+size*30);
}
dr=dr*30;
dc=dc*30;
line(dr,dc,dr+30,dc+30);
line(dr,dc+30,dr+30,dc);
}
void x(int i,int j){
i=i*30;
j=j*30;
line(i,j,i+30,j+30);
line(i,j+30,i+30,j);
}
void ChessBoard(int tr,int tc,int dr,int dc,int size){
int s;
int t;
t=tile++;
if(size==1)return;
s=size/2;
if(dr<tr+s&&dc<tc+s)
ChessBoard(tr,tc,dr,dc,s);
else{
setcolor(t);
x(tr+s-1,tc+s-1);
ChessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
if(dr<tr+s&&dc>=tc+s)
ChessBoard(tr,tc+s,dr,dc,s);
else{
setcolor(t);
x(tr+s-1,tc+s);
ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
}
if(dr>=tr+s&&dc<tc+s)
ChessBoard(tr+s,tc,dr,dc,s);
else{
setcolor(t);
x(tr+s,tc+s-1);
ChessBoard(tr+s,tc,tr+s,tc+s-1,s);
}
if(dr>=tr+s&&dc>=tc+s)
ChessBoard(tr+s,tc+s,dr,dc,s);
else{
setcolor(t);
x(tr+s,tc+s);
ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
}
}
main(){
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
image(0,0,3,3,4);
getch();
ChessBoard(0,0,3,3,4);
getch();
closegraph();
}