棋盘覆盖(绘图版)

 1 #include<graphics.h>
 2 #include<stdlib.h>
 3 #include<stdio.h>
 4 #include<conio.h>
 5 #include<time.h>
 6 #include<cmath>
 7 
 8 int tile=1;
 9 int board[100][100];
10 int color[16] = { BLACK,GREEN,BLUE,CYAN,RED,YELLOW,WHITE,LIGHTMAGENTA,\
11 LIGHTRED,LIGHTCYAN,LIGHTGREEN,LIGHTBLUE,DARKGRAY,LIGHTGRAY,BROWN,MAGENTA};
12 
13 void chessBoard(int tr, int tc, int dr, int dc, int size)
14 {
15        if(size==1)
16               return;
17        int t=tile++;
18        int s=size/2;
19        if(dr<tr+s && dc<tc+s)
20               chessBoard(tr, tc, dr, dc, s);
21        else
22        {
23               board[tr+s-1][tc+s-1]=t;
24               chessBoard(tr, tc, tr+s-1, tc+s-1, s);
25        }
26        if(dr<tr+s && dc>=tc+s)
27               chessBoard(tr, tc+s, dr, dc, s);
28        else
29        {
30               board[tr+s-1][tc+s]=t;
31               chessBoard(tr, tc+s, tr+s-1, tc+s, s);
32        }
33        if(dr>=tr+s && dc<tc+s)
34               chessBoard(tr+s, tc, dr, dc, s);
35        else
36        {
37               board[tr+s][tc+s-1]=t;
38               chessBoard(tr+s, tc, tr+s, tc+s-1, s);
39        }
40        if(dr>=tr+s && dc>=tc+s)
41               chessBoard(tr+s, tc+s, dr, dc, s);
42        else
43        {
44               board[tr+s][tc+s]=t;
45               chessBoard(tr+s, tc+s, tr+s, tc+s, s);
46        }
47 }
48 
49 void main()
50 {
51        int i,j;
52        int size;
53        int index_x,index_y;
54        printf("请输入棋盘边长(必须是2的K次幂)\n");
55        scanf("%d",&size);
56        printf("请输入棋盘中要覆盖点的坐标:\n");
57        scanf("%d%d",&index_x,&index_y);
58        initgraph(640,640);
59        chessBoard(0,0,index_x,index_y,size);
60        BeginBatchDraw();
61        int S=size*size;
62    for(int k=0;k<S;k++)
63    {
64     i=k/size;
65     j=k%size;
66    setfillcolor(color[board[i][j]%15]);
67    solidrectangle(40*j,(40+40*i),(40+40*j),40*i);
68    }
69 FlushBatchDraw();
70 EndBatchDraw();
71 getch();
72 closegraph();
73 }