论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

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

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:43:11

#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");
  }
  }

上一篇:{实例}huffmancode 人气:4601
下一篇:{实例}绘图程序例 人气:6475
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058