此程序包含graphics.h类库,只能在TC下运行,希望高手能尽快改正错误,感激涕零!
程序代码为:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
int tile=0;
int * * board;
int graph(int **board,int size)
{
int i,j;
int dx;
int gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
setbkcolor(0);
registerbgidriver(EGAVGA_driver);
dx=300/size;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
{
if(board[i][j]>0)
{
if(board[i][j]=board[i][j+1]=board[i+1][j])
{
setfillstyle(1,BLACK);
bar(140+(j-1)*dx,90+(i-1)*dx,140+(j-1)*dx+dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx+dx,90+(i-1)*dx,140+(j-1)*dx+2*dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx,90+(i-1)*dx+dx,140+(j-1)*dx+dx,90+(i-1)*dx+2*dx);
board[i][j]=-1;
board[i][j+1]=-1;
board[i+1][j]=-1;
}
else if(board[i][j]==board[i][j+1]&&board[i][j]==board[i+1][j+1])
{
setfillstyle(1,YELLOW);
bar(140+(j-1)*dx,90+(i-1)*dx,140+(j-1)*dx+dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx+dx,90+(i-1)*dx,140+(j-1)*dx+2*dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx,90+(i-1)*dx+dx,140+(j-1)*dx+dx,90+(i-1)*dx+2*dx);
board[i][j]=-1;
board[i][j+1]=-1;
board[i+1][j]=-1;
}
else if(board[i][j]==board[i+1][j]&&board[i][j]==board[i+1][j+1])
{
setfillstyle(1,BLUE);
bar(140+(j-1)*dx,90+(i-1)*dx,140+(j-1)*dx+dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx+dx,90+(i-1)*dx,140+(j-1)*dx+2*dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx,90+(i-1)*dx+dx,140+(j-1)*dx+dx,90+(i-1)*dx+2*dx);
board[i][j]=-1;
board[i][j+1]=-1;
board[i+1][j]=-1;
}
else if(board[i][j]==board[i+1][j]&&board[i][j]==board[i+1][j-1])
{
setfillstyle(1,BROWN);
bar(140+(j-1)*dx,90+(i-1)*dx,140+(j-1)*dx+dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx+dx,90+(i-1)*dx,140+(j-1)*dx+2*dx,90+(i-1)*dx+dx);
bar(140+(j-1)*dx,90+(i-1)*dx+dx,140+(j-1)*dx+dx,90+(i-1)*dx+2*dx);
board[i][j]=-1;
board[i][j+1]=-1;
board[i+1][j]=-1;
}
else if(board[i][j]==0)
{
setfillstyle(1,WHITE);
bar(140+(j-1)*dx,90+(i-1)*dx,140+(j-1)*dx+dx,90+(i-1)*dx+dx);
}
setcolor(BLACK);
for(i=1;i<=size;i++)
line(140,90+(i-1)*dx,440,90+(i-1)*dx);
for(j=1;j<=size;j++)
line(140+(j-1)*dx,90,140+(j-1)*dx,390);
closegraph();
return 0;
}
void chessboard(int tr,int tc,int dr,int dc,int size)
{
int s,t;
if(size==1)return;
t=tile++;
s=size/2;
if((dr<tr+s)&&(dc<tc+s))
chessboard(tr,tc,dr,dc,s);
else
{
board[tr+s-1][tc+s-1]=t;
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
{
board[tr+s-1][tc+s]=t;
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
{
board[tr+s][tc+s-1]=t;
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
{
board[tr+s][tc+s]=t;
chessboard(tr+s,tc+s,tr+s,tc+s,s);
}
}
void main()
{
clrscr();
int i,j;
int tr,tc,dr,dc,size;
printf("size=/n");
scanf("%d",&size);
board=malloc(size*sizeof(int*));
for(i=0;i<size;i++)
board[i]=malloc(size*sizeof(int));
for(i=0;i<size;i++)
for(j=0;j<size;j++)
board[i][j]=0;
printf("/n qingshuru tr,tc,dr,dc:/n");
scanf("%d%d%d%d",&tr,&tc,&dr,&dc);
chessboard(tr,tc,dr,dc,size);
graph(board,size);
return 0;
}
}
}