} if(kk!=j-1) yes=1; } }
if(i<6)判断下边 {
for(k=i+1;k<8;k++) if(a[k][j]==a[i][j]||!a[k][j]) break;
if(a[k][j]!=0&&k<8) { for(kk=i+1;kk if(i>1)判断上边 { for(k=i-1;k>=0;k--) if(a[k][j]==a[i][j]||!a[k][j]) break; if(a[k][j]!=0&&k>=0) { for(kk=i-1;kk>k&&k>=0;kk--) { a[kk][j]=a[i][j]; fillellipse(120+kk40,120+j40,15,15); } if(kk!=i-1) yes=1; } } if(i>1&&j<6)右上 { for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++) if(a[k][kk]==a[i][j]||!a[k][kk]) break; if(a[k][kk]&&k>=0&&kk<8) { for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++) { a[ii][jj]=a[i][j]; fillellipse(120+ii40,120+jj40,15,15); } if(ii!=i-1) yes=1; } } if(i<6&&j>1)左下 { for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--) if(a[k][kk]==a[i][j]||!a[k][kk]) break; if(a[k][kk]!=0&&k<8&&kk>=0) { for(ii=i+1,jj=j-1;ii if(ii!=i+1) yes=1; } } if(i>1&&j>1)左上 { for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--) if(a[k][kk]==a[i][j]||!a[k][kk]) break; if(a[k][kk]!=0&&k>=0&&kk>=0) { for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--) { a[ii][jj]=a[i][j]; fillellipse(120+ii40,120+jj40,15,15); } if(ii!=i-1) yes=1; } } if(i<6&&j<6) 右下 { for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++) if(a[k][kk]==a[i][j]||!a[k][kk]) break; if(a[k][kk]!=0&&kk<8&&k<8) { for(ii=i+1,jj=j+1;ii if(ii!=i+1) yes=1; } } return yes;返回是否改变过棋子颜色的标记 } void DoScore()处理分数 { int i,j; score1=score2=0;重新开始计分数 for(i=0;i<8;i++) for(j=0;j<8;j++) if(a[i][j]==1)分别统计两个人的分数 score1++; else if(a[i][j]==2) score2++; } void PrintScore(int playnum)输出成绩 { if(playnum==1)清除以前的成绩 { setfillstyle(SOLID_FILL,BLUE); bar(550,100,640,400); } setcolor(RED); settextstyle(0,0,4);设置文本输出样式 if(playnum==1)判断输出哪个棋手的分,在不同的位置输出 { sprintf(playone,\ outtextxy(550,200,playone); } else { sprintf(playtwo,\ outtextxy(550,300,playtwo); } setcolor(0); } void playWin()输出最后的胜利者结果 { settextstyle(0,0,4); setcolor(12); if(score2>score1)开始判断最后的结果 outtextxy(100,50,\ else if(score2 案例四 迷宫问题 4.3.3源程序 #include #define N 20迷宫的大小,可改变 int oldmap[N][N];递归用的数组,用全局变量节约时间 int yes=0;yes是判断是否找到路的标志,1找到,0没找到 int way[100][2],wayn=0;way数组是显示路线用的,wayn是统计走了几个格子 void Init(void);图形初始化 void Close(void);图形关闭 void DrawPeople(int x,int y,int n);画人工探索物图 void PeopleFind(int (x)[N]);人工探索 void WayCopy(int (x)[N],int (y)[N]);为了8个方向的递归,把旧迷宫图拷贝给新数组 int FindWay(int (x)[N],int i,int j);自动探索函数 void MapRand(int (x)[N]);随机生成迷宫函数 void PrMap(int (x)[N]);输出迷宫图函数 void Result(void);输出结果处理 void Find(void);成功处理 void NotFind(void);失败处理 void main(void)主函数 { int map[N][N]; 迷宫数组 char ch;