C语言十大经典实例编程_第1页
C语言十大经典实例编程_第2页
C语言十大经典实例编程_第3页
C语言十大经典实例编程_第4页
C语言十大经典实例编程_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、案例一贪吃蛇游戏#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/* 得分*/int gamespeed=50000;/* 游戏速度自己调整*/ struct Foodint x;/*食物的横坐标*/int y;/*食物的纵坐标*/int ye

2、s;/*判断是否要出现食物的变量*/food;/*食物的结构体*/struct SnakeWord文档int xN;int yN;int node;/* 蛇的节数*/int direction;/* 蛇移动方向 */int life;/*蛇的生命,0活着,1死亡*/snake;void Init(void);/*图形驱动 */void Close(void);/* 图形结束 */void DrawK(void);/* 开始画面 */void GameOver(void);/*结束游戏 */void GamePlay(void);/*玩游戏具体过程 */void PrScore(void);/*

3、输出成绩 */*主函数*/void main(void)Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/*图形驱动*/void Init(void)int gd=DETECT,gm;initgraph(&gd,&gm,"c:tc");cleardevice();/*开始画面,左上角坐标为(50, 40),右下角坐标为(610, 460)的围墙*/void DrawK(void)/*setbkcolor(LIGHTGREEN);*/setcolor(11);setline

4、style(SOLID_LINE,0,THICK_WIDTH);/* 设置线型 */for(i=50;i<=600;i+=10)/* 画围墙 */rectangle(i,40,i+10,49); /*上边*/rectangle(i,451,i+10,460);/*下边*/for(i=40;i<=450;i+=10)rectangle(50,i,59,i+10); /* 左边*/rectangle(601,i,610,i+10);/*右边*/*玩游戏具体过程*/void GamePlay(void)randomize。;/* 随机数发生器*/food.yes=1;/*1表示需要出现新

5、食物,0表示已经存在食物*/snake.life=0;/* 活着*/snake.direction=1;/*方向往右 */snake.x0=100;snake.y0=100;/* 蛇头 */snake.x1=110;snake.y1=100;snake.node=2;/* 节数*/PrScore();/* 输出得分 */while(1)/*可以重复玩游戏,压ESC键结束*/while(!kbhit()/*在没有按键的情况下,蛇自己移动身体*/if(food.yes=1)/*需要出现新食物*/food.x=rand()%400+60;food.y=rand()%350+60;while(food

6、.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x+;while(food.y%10!=0)food.y+;food.yes=0;/* 画面上有食物了 */if(food.yes=0)/*画面上有食物了就要显示*/setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);for(i=snake.node-1;i>0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/snake.xi=snake.xi-1;snake.yi=snake.yi-1;/*1,2,3,4表示右,左,

7、上,下四个方向,通过这个判断来移动蛇头*/switch(snake.direction)case 1:snake.x0+=10;break;case 2: snake.x0-=10;break;case 3: snake.y0-=10;break;case 4: snake.y0+=10;break;for(i=3;i<snake.node;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/if(snake.xi=snake.x0&&snake.yi=snake.y0)GameOver();/*显示失败 */snake.life=1;br

8、eak;if(snake.x0<55|snake.x0>595|snake.y0<55|snake.y0>455)/* 蛇是否撞到墙壁*/GameOver();/* 本次游戏结束*/snake.life=1; /* 蛇死 */if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake.x0=food.x&&snake.y0=food.y)/*吃到食物以后 */setcolor(0);/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10

9、);snake.xsnake.node=-20;snake.ysnake.node=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node+;/*蛇的身体长一节*/food.yes=1;/* 画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/setcolor(4);/* 画出蛇*/for(i=0;i<snake.node;i+)rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/

10、rectangle(snake.xsnake.node-1,snake.ysnake.node-1,snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile (! kbhit ) */if(snake.life=1)/* 如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键 */if(key=ESC)/* 按 ESC 键退出*/break;elseif(key=UP&&snake.direction!=4)/*判断是否往相反的方向移动*/snake.direction=3;elseif(key=

11、RIGHT&&snake.direction!=2)snake.direction=1;elseif(key=LEFT&&snake.direction!=1)snake.direction=2;elseif(key=DOWN&&snake.direction!=3)snake.direction=4;/*endwhile(1)*/*游戏结束*/void GameOver(void)cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,"G

12、AME OVER");getch();/*输出成绩*/void PrScore(void)char str10;sefillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d”,score);outtextxy(55,20,str);/*图形结束*/void Close(void)getch();closegraph();案例二计算器#include <dos.h>#include <math.h>#inclu

13、de <conio.h>#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <graphics.h>#include <string.h>#include <ctype.h>#define UP 0x48#define DOWN 0x50# define LEFT 0x4b# define RIGHT 0x4d# define ENTER 0x0d/*DOS接口函数*/*数学函数的定义*/*屏幕操作函数*/*I/O 函数*/*库函数*

14、/*变量长度参数表*/*图形函数*/*字符串函数*/*字符操作函数*/*光标上移键*/*光标下移键*/*光标左移键*/*光标右移键*/*回车键*/void *rar;/*全局变量,保存光标图象*/struct palettetype palette; /*int GraphDriver;int GraphMode;int ErrorCode;int MaxColors;int MaxX, MaxY;使用调色板信息*/*图形设备驱动*/*图形模式值*/*错误代码*/*可用颜色的最大数值*/*屏幕的最大分辨率*/double AspectRatio; /* 屏幕的像素比 */void drawbo

15、der(void); /*画边框函数 */void initialize(void); /* 初始化函数 */void computer(void); /* 计算器计算函数 */void changetextstyle(int font, int direction, int charsize);/*改变文本样式函数*/void mwindow(char *header); /* 窗口 函数 */int specialkey(void) ;/* 获取特殊键函数 */int arrow();/*设置箭头光标函数*/*主函数*/int main()initialize。;/* 设置系统进入图形模式

16、 */computer。; /*运行计算器*/closegraph();/*系统关闭图形模式返回文本模式*/return(0); /* 结束程序 */*设置系统进入图形模式*/void initialize(void)int xasp, yasp;/*用于读x和y方向纵横比*/GraphDriver = DETECT; /*自动检测显示器 */initgraph( &GraphDriver, &GraphMode,"");/*初始化图形系统*/ErrorCode = graphresult();/* 读初始化结果 */if( ErrorCode != grO

17、k )/*如果初始化时出现错误*/printf("Graphics System Error: %sn”,grapherrormsg( ErrorCode ); /*显示错误代码*/exit( 1 );/* 退出*/getpalette( &palette );/* 读面板信息*/MaxColors = getmaxc010ro + 1;/* 读取颜色的最大值 */MaxX = getmaxx(); /* 读屏幕尺寸 */MaxY = getmaxy(); /* 读屏幕尺寸 */getaspectratio( &xasp, &yasp );/* 拷贝纵横比到变

18、量中 */AspectRatio = (double)xasp/(double)yasp;/*计算纵横比值 */*计算器函数*/void computer(void)struct viewporttype vp;/* 定义视 口 类型变量 */int color, height, width;int x, y,x0,y0, i, j,v,m,n,act,flag=1;float num1=0,num2=0,result;/*操作数和计算结果变量*/char cnum5,str220="",Gtemp20=""char str1="1230.45

19、6+-789*/Qc=A%"/*定义字符串在按钮图形上显示的符号*/mwindow( "Calculator" );/* 显示主窗口 */color = 7;/*设置灰颜色值*/getviewsettings( &vp );/* 读取当前窗 口 的大小 */width=(vp.right+1)/10;/* 设置按钮宽度*/height=(vp.bottom-10)/10 ;/* 设置按钮高度*/x = width /2;/*设置x的坐标值*/y = height/2;/*设置y的坐标值*/setfillstyle(SOLID_FILL, color+3);

20、bar( x+width*2, y, x+7*width, y+height );/*画一个二维矩形条显示运算数和结果*/setcolor( color+3 );/*设置淡绿颜色边框线*/rectangle( x+width*2, y, x+7*width, y+height );/*画一个矩形边框线*/setcolor(RED); /*设置颜色为红色*/outtextxy(x+3*width,y+height/2,"0."); /* 输出字符串"0."*/x =2*width-width/2; /* 设置 x 的坐标值 */y =2*height+he

21、ight/2; /* 设置 y 的坐标值 */for( j=0 ; j<4 ;+j) /* 画按钮*/for( i=0 ; i<5 ; +i ) sefillstyle(SOLID_FILL, color);setcolor(RED);bar( x, y, x+width, y+height ); /*画一个矩形条 */rectangle( x, y, x+width, y+height );sprintf(str2,"%c",stU/5+i);/*将字符保存到str2中*/outtextxy( x+(width/2), y+height/2, str2);x

22、=x+width+ (width / 2) ;/* 移动列坐标 */y +=(height/2)*3;/* 移动行坐标 */x =2*width-width/2; /* 复位列坐标 */x0=2*width;y0=3*height;x=x0;y=y0;gotoxy(x,y); /*移动光标到x,y位置*/arrow();/*显示光标*/putimage(x,y,rar,XOR_PUT);m=0;n=0;strcpy(str2,""); /* 设置 str2 为空用 */while(v=specialkey()!=45) /*当压下Alt+x键结束程序,否则执行下面的循环*/

23、while(v=specialkey()!=ENTER) /* 当压下键不是回车时 */putimage(x,y,rar,XOR_PUT); /*显示光标图象 */if(v=RIGHT) /*右移箭头时新位置计算*/if(x>=x0+6*width)/*如果右移,移到尾,则移动到最左边字符位置*/x=x0;m=0;elsex=x+width+width/2;m+;/*否则,右移到下一个字符位置*/if(v=LEFT) /*左移箭头时新位置计算*/if(x<=x0)x=x0+6*width;m=4; /*如果移到头,再左移,则移动到最右边字符位置*/elsex=x-width-wid

24、th/2;m-;/*否则,左移到前一个字符位置*/if(v=UP) /*上移箭头时新位置计算*/if(y<=y0)y=y0+4*height+height/2;n=3; /*如果移到头,再上移,则移动到最下边字符位置*/elsey=y-height-height/2;n-;/*否则,移到上边一个字符位置*/if(v=DOWN)/*下移箭头时新位置计算*/if(y>=7*height)y=y0;n=0;/*如果移到尾,再下移,则移动到最上边字符位置*/elsey=y+height+height/2;n+;/*否则,移到下边一个字符位置*/putimage(x,y,rar,XOR_PU

25、T);/*在新的位置显示光标箭头*/c=str1n*5+m;/*将字符保存到变量 c中*/if(isdigit(c)11c='.')/*判断是否是数字或小数点*/if(flag=-1) /*如果标志为-1,表明为负数*/strcpy(str2,"-");/*将负号连接到字符串中*/flag=1;/*将标志值恢复为1*/sprintf(temp,"%c",c);/*将字符保存到字符串变量 temp中*/strcat(str2,temp);/* 将temp 中的字符串连接到str2中*/sefillstyle(SOLID_FILL,color

26、+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/* 显示字符用 */if(c='+')num1=atof(str2); /*将第一个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空*/act=1; /*做计算加法标志值*/sefillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtext

27、xy(5*width,height,"0.");/* 显示字符用 */if(c='-')if(strcmp(str2,"")=0)/* 如果str2为空,说明是负号,而不是减号*/flag=-1;/*设置负数标志*/elsenum1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空 */ act=2; /*做计算减法标志值*/ setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15

28、*width/2,3*height/2); /*画矩形*/outtextxy(5*width,height,"0."); /* 显示字符用 */if(c='*')num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空*/act=3; /*做计算乘法标志值*/sefillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,heigh

29、t,"0.");/* 显示字符用 */if(c='/')num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空*/act=4; /*做计算除法标志值*/sefillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/* 显示字符用 */if(c=w)num1=atof(str2);

30、/*将第二个操作数转换为浮点数*/strcpy(str2,""); /* 将 str2 清空*/act=5; /*做计算乘方标志值*/sefillstyle(SOLID_FILL,color+3); /* 设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*outtextxy(5*width,height,"0.");/* 显示字符用 */if(c='%')num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,"

31、;"); /* 将 str2 清空 */act=6; /*做计算模运算乘方标志值*/sefillstyle(SOLID_FILL,color+3); /* 设置用淡绿色实体填充*/画矩形*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*outtextxy(5*width,height,"0.");/* 显示字符用 */if(c='=')画矩形*/num2=atof(str2); /* 将第二个操作数转换为浮点数*/switch(act)/*根据运算符号计算*/case 1:result

32、=num1+num2;break; /*做加法*/case 2:result=num1-num2;break; /*做减法 */case 3:result=num1*num2;break; /*做乘法*/case 4:result=num1/num2;break; /*做除法 */case 5:result=pow(num1,num2);break; /* 做 x 的 y 次方*/case 6:result=fmod(num1,num2);break; /*做模运算 */sefillstyle(SOLID_FILL,color+3); /* 设置用淡绿色实体填充 */bar(2*width+w

33、idth/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/sprintf(temp,"%f",result);/*将结果保存到 temp 中*/outtextxy(5*width,height,temp); /*显示结果 */if(c='c')num1=0; /*将两个操作数复位0,符号标志为1*/num2=0;flag=1;strcpy(str2,""); /* 将 str2 清空*/sefillstyle(SOLID_FILL,color+3);/* 设置用淡绿色实体填充 */bar(2*widt

34、h+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/outtextxy(5*width,height,"0.");/* 显示字符用 */if(c='Q')exit(0);/*如果选择了 q回车,结束计算程序*/putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头*/return; /* 返回*/*窗口函数*/void mwindow( char *header )int height;cleardevice();/*消除图形屏幕*/setcolor( MaxColors - 1 )

35、;/*设置当前颜色为白色*/setviewport( 20, 20, MaxX/2, MaxY/2, 1 );/* 设置视口大小 */height = textheight( "H" );/* 读取基本文本大小*/settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/* 设置文本样式 */ settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式 */outtextxy( MaxX/4, 2, header );/* 输出标题 */setviewport( 20,20+height+4, MaxX

36、/2+4, MaxY/2+20, 1 );/*设置视口大小*/drawboder(); /* 画边框 */void drawboder(void) /* 画边框 */struct viewporttype vp;/* 定义视 口 类型变量 */setcolor( MaxColors - 1 );/*设置当前颜色为白色*/setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/* 设置画线方式 */getviewsettings( &vp );/*将当前视口信息装入 vp所指的2构中*/rectangle( 0, 0, vp.right-vp.left, v

37、p.bottom-vp.top ); /*画矩形边框 */*设计鼠标图形函数*/int arrow()int size;int raw=4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4; /*定义多边形坐标 */setfillstyle(SOLID_FILL,2); /* 设置填充模式 */fillpoly(8,raw);/* 画出一光标箭头 */size=imagesize(4,4,16,16);/* 测试图象大小 */rar=malloc(size);/* 分配内存区域 */getimage(4,4,16,16,rar);/*存放光标箭头图象 */putimage(4

38、,4,rar,XOR_PUT); /*消去光标箭头图象*/return 0;/*按键函数*/int specialkey(void)int key;while(bioskey(1)=0);/* 等待键盘输入 */key=bioskey(0);/* 键盘输入 */0*/key=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为 return(key); /* 返回键值 */案例三黑白棋游戏/*3.3.4源程序*/#include "graphics.h" /* 图形系统头文件 */#define LEFT 0x4b

39、00/* 光标左键值 */#define RIGHT 0x4d00 /* 光标右键值 */#define DOWN 0x5000 /*光标下键值 */#define UP 0x4800 /* 光标上键值 */#define ESC 0x011b /* ESC 键值 */#define ENTER 0x1c0d /*回车键值 */int a88=0,key,score1,score2;/*具体分数以及按键与存放棋子的变量*/char playone3,playtwo3;/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数 */void DrawQp(v

40、oid);/* 画棋盘函数 */void SetPlayColor(int x);/*设置棋子第一次的颜色 */void MoveColor(int x,int y);/*恢复原来棋盘状态 */int QpChange(int x,int y,int z);/* 判断棋盘的变化 */void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*/* 主函数 */ void main(void)int gd=DETECT,gr;initgraph(&gd,&gr,&qu

41、ot;c:tc");/* 初始化图形系统 */DrawQp();/* 画棋盘*/playtoplay();/*人人对战 */getch();closegraph();/* 关闭图形系统*/void DrawQp()/* 画棋盘 */int i,j;score1=score2=0;/* 棋手一开始得分都为0*/setbkcolor(BLUE);for(i=100;i<=420;i+=40)line(100,i,420,i);/* 画水平线*/line(i,100,i,420); /* 画垂直线 */setcolor(0);/*取消圆周围的一圈东西*/sefillstyle(SOL

42、ID_FILL,15);/* 白色实体填充模式 */ fillellipse(500,200,15,15); /*在显示得分的位置画棋 */se情llstyle(SOLID_FILL,8); /* 黑色实体填充模式 */ fillellipse(500,300,15,15);a33=a44=1;/*初始两个黑棋 */a34=a43=2;/*初始两个白棋 */sefillstyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);sefillstyle(SOLI

43、D_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);score1=score2=2;/*有棋后改变分数*/DoScore();/*输出开始分数*/ void playtoplay()/*人人对战 */int x,y,t=1,i,j,cc=0;while(1)/*换棋手走棋*/x=120,y=80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/while(1)/*具体一个棋手走棋的过程*/PrintScore(l);/*输出棋手1的成绩*/PrintScore(2);/*

44、输出棋手2的成绩*/SetPlayColor;/*t变量是用来判断棋手所执棋子的颜色*/fillellipse(x,y,15,15);key=bioskey(0);/* 接收按键 */if(key=ESC)/* 跳出游戏 */break;elseif(key=ENTER)/*如果按键确定就可以跳出循环*/if(y!=80&&a(x-120)/40(y-120)/40!=1&&a(x-120)/40(y-120)/40!=2)/* 如果落子位置没有棋子 */if(t%2=1)/*如果是棋手1移动*/a(x-120)/40(y-120)/40=1;else/*否则棋

45、手2移动*/a(x-120)/40(y-120)/40=2;if(!QpChange(x,y,t)/* 落子后判断棋盘的变化*/a(x-120)/40(y-120)/40=0;/*恢复空格状态 */cc+;/*开始统计尝试次数*/if(cc>=64-score1-score2) /*如果尝试超过空格数则停步*/MoveColor(x,y);fillellipse(x,y,15,15);break;elsecontinue;/* 如果按键无效*/DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/else/*已经有棋子就继续按键*/continue;else

46、/*四个方向按键的判断*/if(key=LEFT&&x>120)/* 左方向键*/MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);elseif(key=RIGHT&&x<400&&y>80)/* 右方向键 */MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);elseif(key=UP&&a

47、mp;y>120)/* 上方向键 */MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);elseif(key=DOWN&&y<400)/*下方向键 */MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);if(key=ESC)/* 结束游戏 */格子已经占满break;if(score1+score2)=64|score1=0|score2

48、=0)/*或一方棋子为0判断胜负*/playWin();/* 输出最后结果*/break;t=t%2+1;/* 一方走后,改变棋子颜色即轮对方走*/cc=0;/*计数值恢复为0*/ /*endwhile*/void SetPlayColor(int t)/*设置棋子颜色 */if(t%2=1)se情llstyle(SOLID_FILL,15);/* 白色*/elsesefillstyle(SOLID_FILL,8);/* 灰色*/void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态 */if(y<100)/*如果是从起点出发就恢复蓝色*/sefillst

49、yle(SOLID_FILL,BLUE);else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/switch(a(x-120)/40(y-120)/40)case 1:setfillstyle(SOLID_FILL,15);break; /* 白色*/case 2:setfillstyle(SOLID_FILL,8);break; /* 黑色*/default: sefillstyle(SOLID_FILL,BLUE); /* 蓝色*/int QpChange(int x,int y,int t)/*判断棋盘的变化 */int i,j,k,kk,ii,jj,yes;ye

50、s=0;i=(x-120)/40;/*计算数组元素的行下标*/j=(y-120)/40;/*计算数组元素的列下标*/SetPlayColor(t);/*设置棋子变化的颜色*/*开始往8个方向判断变化*/if(j<6)/* 往右边*/for(k=j+1;k<8;k+)if(aik=aij|aik=0)/* 遇到自己的棋子或空格结束*/ break;if(aik!=0&&k<8)for(kk=j+1;kk<k&&k<8;kk+)/* 判断右边 */ aikk=aij; /*改变棋子颜色 */fillellipse(120+i*40,12

51、0+kk*40,15,15);if(kk!=j+1)/*条件成立则有棋子改变过颜色*/ yes=1;if(j>1)/*判断左边*/for(k=j-1;k>=0;k-)if(aik=ai皿!aik)break;if(aik!=0&&k>=0)for(kk=j-1;kk>k&&k>=0;kk-)aikk=aijfillellipse(120+i*40,120+kk*40,15,15);if(kk!=j-1)yes=1;if(i<6)/*判断下边*/for(k=i+1;k<8;k+)if(akj=ai皿!akj)break;i

52、f(akj!=0&&k<8)for(kk=i+1;kk<k&&k<8;kk+)akkj=aij;fillellipse(120+kk*40,120+j*40,15,15);if(kk!=i+1)yes=1;if(i>1)/*判断上边*/for(k=i-1;k>=0;k-)if(akj=aij|!akj)break;if(akj!=0&&k>=0)(for(kk=i-1;kk>k&&k>=0;kk-)(akkj=aij;fillellipse(120+kk*40,120+j*40,15

53、,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(akkk=aij|!akkk)break;if(akkk&&k>=0&&kk<8)(for(ii=i-1,jj=j+1;ii>k&&k>=0;ii-,jj+)aiijj=aij; fillellipse(120+ii*40,120+jj*40,15,15);if(ii!=i-1)yes=1;if(i<6&

54、amp;&j>1)/* 左下*/for(k=i+1,kk=j-1;k<8&&kk>=0;k+,kk-)if(akkk=a皿|!akkk)break;if(akkk!=0&&k<8&&kk>=0)for(ii=i+1,jj=j-1;ii<k&&k<8;ii+,jj-)aiijj=aijfillellipse(120+ii*40,120+jj*40,15,15);if(ii!=i+1)yes=1;)if(i>1&&j>1)/* 左上*/(for(k=i-1,

55、kk=j-1;k>=0&&kk>=0;k-,kk-)if(akkk=aij|!akkk)break;if(akkk!=0&&k>=0&&kk>=0)(for(ii=i-1,jj=j-1;ii>k&&k>=0;ii-,jj-)(aiijj=aij;fillellipse(120+ii*40,120+jj*40,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(akkk=aij|!akkk)break;if(akkk!=0&&kk<8&&k&l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论