time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > 超酷的马踏棋盘(在DOS下运行)

超酷的马踏棋盘(在DOS下运行)

时间:2009-09-20 23:31 点击:587次 字体:[ ]




 #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)

 



本文地址 : http://www.fengfly.com/plus/view-77312-1.html
标签: 实例编程 棋盘
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:
本栏分类