#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#define PF cprintf("\n****************************************************\n");
int deltai[]={2,1,-1,-2,-2,-1,1,2};
int deltaj[]={1,2,2,1,-1,-2,-2,-1};
int board[8][8];
/* 求(i,j)的出口数和各出口号于a[] */
int exitn(int i,int j,int a[])
{ int i1,j1,k,count;
for(count=k=0;k<8;k++)
{ i1=i+deltai[k%8];
j1=j+deltaj[k%8];
if(i1>=0&&i1<8&&j1>=0&&j1<8&&board[i1][j1]==0)
a[count++]=k%8;
}
return count;
}
/* 选择下一个出口 */
int next(int i,int j)
{ int m,k,kk,min,a[8],b[8],temp;
m=exitn(i,j,a); /* 确定(i,j)的出口个数 */
if(m==0)
return -1; /* 没有出口 */
for(min=9,k=0;k<m;k++) /* 逐一考察各个出口 */
{ temp=exitn(i+deltai[a[k>,j+deltaj[a[k>,b);
if(temp<min) /* 找出有最少出口数的出口 */
{ min=temp;kk=a[k];
}}
return kk; /* 返回选中的着法 */
}
/* 欢迎界面 */
void preface()
{
int graphdrive=VGA;
int graphmode=VGAHI;
initgraph(&graphdrive,&graphmode,"");
setbkcolor(5);
rectangle(0,9,638,475);
setfillstyle(1,9);
bar(10,30,637,10);
bar(1,10,20,339);
bar(10,290,637,339);
bar(618,320,637,30);
setfillstyle(1,4);
bar(40,50,590,250);
setcolor(10);
rectangle(40,50,591,250);
setcolor(12);
rectangle(60,70,570,230);
moveto(100,100);
settextstyle(0,0,3);
setcolor(10);
outtext("WELECOME TO USE!");
moveto(400,170);
settextstyle(1,0,2);
outtext("淮海工学院");
setcolor(WHITE);
line(0,340,638,340);
gotoxy(2,23);
printf("*软件设计要求: \n\n");
printf(" 设计一个国际象棋的马踏遍棋盘的演示程序.\n\n");
printf("\n *任意键进入*\n");
getch();
closegraph();
}
/* 程序的演示图 */
/*****************************************************************************/
/* 画棋盘 */
qipan()
{
int i;
for(i=0;i<9;i++)
{
line(100+i*50,50,100+i*50,450);
line(100,50+i*50,500,50+i*50);
}
}
/* 清屏 */
clears(i,j)
{
setfillstyle(1,BLACK);
bar(101+i*50,51+j*50,149+i*50,99+j*50);
}
/* 马根据所得结果的演示走法 */
void qipan1()
{
void *trp;
int graphdrive=VGA,i,j,c,k=1;
int graphmode=VGAHI;
initgraph(&graphdrive,&graphmode," ");
qipan();
setbkcolor(8);
setcolor(10);
circle(25,25,15);
setcolor(WHITE);
gotoxy(10,2);
printf("棋子"马"");
trp=(void*)malloc(sizeof(imagesize(9,9,41,41)));
getimage(9,9,41,41,trp);
do{
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
if(board[i][j]==k)
{
gotoxy(1,4);
printf("board[%d][%d]:",i,j);
qipan();
putimage(110+j*50,60+i*50,trp,COPY_PUT);
for(c=0;c<5;c++)
delay(900000);
clears(j,i);
k++;
break;
}
}
}while(k<65);
closegraph();
}
/*****************************************************************************/
void main()
{
int sx,sy,i,j,step,no,k;
char c;
clrscr();
preface();
while(1){
clrscr();
Loop1: textcolor(GREEN);
cprintf("\nInput the sx[0--7] and sy[0--7]:");
printf("\n");
cprintf(" ( board[sx][sy] )");
printf("\n");
cprintf(" sx=");
scanf("%d",&sx);
printf("\n");
cprintf(" sy=");
scanf("%d",&sy);
if(sx>7||sx<0||sy>7||sy<0)
{ sound(1000);
delay(9999);
nosound();
textcolor(RED);
cprintf("Warning:\n");
cprintf("\n\n The number must between 0 and 7 !!");
printf("\n");
cprintf(" Please input again!");
printf("\n");
goto Loop1;
}
clrscr();
textcolor(YELLOW);
cprintf("\nThe board[%d][%d] is:",sx,sy);
printf("\n");
do{
for(i=0;i<8;i++)
for(j=0;j<8;j++)
board[i][j]=0;
board[sx][sy]=1;
i=sx;
j=sy;
for(step=2;step<=64;step++)
{ if((no=next(i,j))==-1)
break;
i+=deltai[no];
j+=deltaj[no];
board[i][j]=step;
}
if(step>64)
break;
}while(step<=64);
textcolor(LIGHTRED);
printf(" ");
PF;
printf("\n ");
textcolor(LIGHTBLUE);
for(i=0;i<8;i++)
{ for(j=0;j<8;j++)
cprintf("%6d",board[i][j]);
printf("\n\n ");
}
textcolor(LIGHTRED);
PF;
printf("\n");
printf(" 是否查看图形演示 y/n\n");
c=getch();
if(c!='y'&&c!='Y')
goto Loop2;
qipan1();
printf("\n");
Loop2: textcolor(YELLOW);
cprintf("\n是否继续输入?(y/n)");
c=getch();
if(c!='Y'&&c!='y')
exit(0);
printf("\n");
}
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |