C语言围棋对弈程序设计_第1页
C语言围棋对弈程序设计_第2页
C语言围棋对弈程序设计_第3页
C语言围棋对弈程序设计_第4页
C语言围棋对弈程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

C语言围棋对弈程序设计用C语言编写一个围棋对弈棋室的程序,模仿两人对弈的过程,其中包括自动提子功能,和自动点目功能。1、围棋的一些基本常识:(1)围棋棋子的“气”见右图1所示黑棋1有4“气”,分别是水平方向上的左右各有一气,垂直方向上的上下各有一气,对角上的不是它的气。图1棋子外“气”(2)提子(吃子),当下在棋盘上的棋子没有外气时便被提掉(死棋)。图2、打吃状态图3、提子图2中黑1和白2都只有一口外气,图3黑先下7位白2没有外气被提掉。图4、倒扑提子过程图5死穴图4演示了倒扑提子全过程,图中左上为原型,左下黑先黑41扑,右上白64提,右下黑93反提把白棋全吃掉。(3)死穴:上图5黑1、3、5、7四颗黑子中间交差点对白棋来说是死穴,白棋下不进处,但对黑棋不影响可下见图下方。2、自动提子功能实现下在棋盘上的棋子同类别的在某一方位上可能是一颗或是一片(纵横连续的),要实现自动提子首要的是计算清楚这些同类棋子的所有外气是多少,如果已经没有外气提掉。一颗棋子下在棋盘上最多有4口外气(见图1),在边上有3气,在角上只有2气。在程序中对于每一颗棋子检测外气描述如下:检测棋子可能有的方向上(上、下、左、右)是否有棋子,如果有,那么在该方向上没有外气。如果在所有的方向上都有棋子,那么它在棋盘上是无外气的。如果在它所有方向上没有同类棋子而且又无外气,那么该颗棋子可以提掉(见图3)。如果在某一方向上有同类棋子,必须计算完连在一起同类的所有外气。如果整片无外气,该片可以提掉(见图4)。为了方便操作,在程序中对棋子定义了数据结构:typedefstruct{intr;//行号intc;//列号ints;//棋类别intf;//棋子存活期intq;//棋子外气数intl;//棋子队列号intn;//有无棋子}QZ;QZQiZiBF[400];QZBOXBF[19][19];检测棋盘上某一位置的外气实现函数:intGet_QI(intr,intc){intt=0;if(r>0)if(BOXBF[r-1][c].n==0)t++;if(r<18)if(BOXBF[r+1][c].n==0)t++;if(c>0)if(BOXBF[r][c-1].n==0)t++;if(c<18)if(BOXBF[r][c+1].n==0)t++;returnt;}为了更好的计算棋子的外气,把同类连在一起的棋子(纵横方向相连)编成一个列队,就是用一个统一的代号表示它们。这是实现自动提子的关键所在,因为只要找到其中一颗棋子,根据代号就能找到全部。在程序中用下函数描述:voidSelectLists(intr,intc){inti,j,k;if(r>0)if(BOXBF[r-1][c].n==1&&BOXBF[r-1][c].s==BOXBF[r][c].s)BOXBF[r][c].l=BOXBF[r-1][c].l;if(r<18){if(BOXBF[r+1][c].n==1&&BOXBF[r+1][c].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r+1][c].l){k=BOXBF[r+1][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r+1][c].l;}}}if(c>0){if(BOXBF[r][c-1].n==1&&BOXBF[r][c-1].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r][c-1].l){k=BOXBF[r][c-1].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c-1].l;}}}if(c<18){if(BOXBF[r][c+1].n==1&&BOXBF[r][c+1].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r][c+1].l){k=BOXBF[r][c+1].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c+1].l;}}}}检测每颗棋子外气的函数:voidDetectQi(){inti,j;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].n==1)BOXBF[i][j].q=Get_QI(i,j);}计算整个列队的外气函数:intGetListsQI(intr,intc,inttq){inti,j,k,mq=0;for(i=0;i<19;i++)for(j=0;j<19;j++){if(BOXBF[i][j].l==BOXBF[r][c].l&&BOXBF[i][j].s==tq)mq+=BOXBF[i][j].q;}returnmq;}3、自动点目功能的实现当棋局收完官子,把所有可下的地方下完,把双方盘面上的死子清除后逐行扫描棋盘。如果行开始无棋子,当遇到棋子时前面的空为该类棋子的实空。如果行末无棋子,该行最大行号减空地数为何棋子实空为它所有。各方实空加同类在棋盘上有效棋子数为各方总棋子数。黑棋数减白棋数乘以2减贴目数为该局的最后结果。voidOutScore(){inti,j,ws=0,bs=0,k;floats;charcn[10];for(i=0;i<19;i++){k=0;for(j=0;j<19;j++){if(BOXBF[i][j].n==0)k++;if(BOXBF[i][j].n==1&&BOXBF[i][j].s==BLACKQI){bs+=k+1;k=0;}if(BOXBF[i][j].n==1&&BOXBF[i][j].s==WHITEQI){ws+=k+1;k=0;}if(j==18&&BOXBF[i][18].n==0){if(BOXBF[i][18-k].s==BLACKQI)bs+=k;if(BOXBF[i][18-k].s==WHITEQI)ws+=k;}}}k=bs-ws;s=2*k-6.5;setfillstyle(1,9);Bar(470,250,615,310,4);setcolor(4);if(s<0){s=-s;sprintf(cn,"%.1f",s);OutCh(mat[1],12,480,280,15);OutCh(mat[18],12,493,280,15);outtextxy(530,280,cn);OutCh(mat[5],12,570,280,15);}else{sprintf(cn,"%.1f",s);OutCh(mat[0],12,480,280,15);OutCh(mat[18],12,493,280,15);outtextxy(530,280,cn);OutCh(mat[5],12,570,280,15);}}4、棋子能下在棋盘上某一位置的条件首先当前准备下子的位置没有棋子存在。其次是当前准备下子的位置如果有外气能下子,如果没有外气,那么分为两种情况。一是当前准备下子位置在能有的方向上的棋子种类一样并且与准备下的棋子种类不一样,得该位置不能下子,如图5所示黑棋1、3、5、7中间的位置白棋不能下。二是当前准备下子位置在能有的方向上棋子种类不一样,此时又分几种情况:一检测在能有方向上同类除了当前位置的外气外是否还有外气,如果有此处能下子,如果没有此处暂时不能下子,同时检测在能有的方向上不同类棋子除了当前位置外气外是否另有外气,如果有此处不能下子,如果无,那么此处能下子并且把没有外气的不同类棋子提掉(吃掉)。实现函数:intSelect(intr,intc,inttq,inthq){BOXBF[r][c].n=1;DetectQi();if(r>0){if(BOXBF[r-1][c].s==tq){if(GetListsQI(r-1,c,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r-1,c,hq)==0){HideCircle(r-1,c,hq);ShowCircle(r,c,tq);return0;}}}if(r<18){if(BOXBF[r+1][c].s==tq){if(GetListsQI(r+1,c,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r+1,c,hq)==0){HideCircle(r+1,c,hq);ShowCircle(r,c,tq);return0;}}}if(c>0){if(BOXBF[r][c-1].s==tq){if(GetListsQI(r,c-1,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r,c-1,hq)==0){HideCircle(r,c-1,hq);ShowCircle(r,c,tq);return0;}}}if(c<18){if(BOXBF[r][c+1].s==tq){if(GetListsQI(r,c+1,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r,c+1,hq)==0){HideCircle(r,c+1,hq);ShowCircle(r,c,tq);return0;}}}BOXBF[r][c].n=0;DetectQi();return0;}voidMakeQi(intr,intc){inttq,hq,color;if(Rear<0)tq=BLACKQI;else{if(Rear%2==0){hq=BLACKQI;tq=WHITEQI;}else{hq=WHITEQI;tq=BLACKQI;}}if(BOXBF[r][c].n==0){if(Get_QI(r,c))ShowCircle(r,c,tq);elseSelect(r,c,tq,hq);}}以上两个函数很重要,在程序中是核心部分,对自动提子功能起到决定条件之一。程序用Win-TC(1.9)编译器编写编译完成,整个过程用鼠标完成操作。下图为围棋对弈室操作界面。程序可在液晶显示器上正常显示图形图6、程序操作界面图6为程序中设计的围棋对弈室操作界面,界面中共有4个按钮,各功能如下所示:关闭――――――退出返回操作系统点目――――――收完官后计算结果确定死子――――点击此处后可用鼠标左键选定死子并点击该子完成――――――点击此处完成确定死子整个过程图7、自动点目(白胜,贴目6.5目,共253手)图8、白胜(共168手)以上图片均由该程序生成的屏幕截图。附程序全部源码:#include"graphics.h"#include"dos.h"#include"math.h"#include"stdio.h"#defineBLACKQI1#defineWHITEQI2intPos[19]={70,90,110,130,150,170,190,210,230,250,270,290,310,330,350,370,390,410,430};typedefstruct{intmx;intmy;intmkey;intbf[16][16];}MOUSEH;MOUSEH*hw;typedefstruct{intr;//行号intc;//列号ints;//棋类别intf;//棋子存活期intq;//棋子外气数intl;//棋子队列号intn;//有无棋子}QZ;QZQiZiBF[400];QZBOXBF[19][19];intMz[2]={0,0};intRear=-1;intRm[3];intGMove=0;charNb[][8]={0xf0,0x90,0x90,0x90,0xf0,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0xf0,0x10,0xf0,0x80,0xf0,0x00,0x00,0x00,0xf0,0x10,0xf0,0x10,0xf0,0x00,0x00,0x00,0x90,0x90,0xf0,0x10,0x10,0x00,0x00,0x00,0xf0,0x80,0xf0,0x10,0xf0,0x00,0x00,0x00,0xf0,0x80,0xf0,0x90,0xf0,0x00,0x00,0x00,0xf0,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0xf0,0x90,0xf0,0x90,0xf0,0x00,0x00,0x00,0xf0,0x90,0xf0,0x10,0xf0,0x00,0x00,0x00,};charN100[]={0x17,0xbc,0x14,0xa4,0x14,0xa4,0x14,0xa4,0x17,0xbc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};charmat[][24]={0x7F,0xC0,0x44,0x40,0x55,0x40,0x4E,0x40,0x7F,0xC0,0x04,0x00,0x7F,0xC0,0x04,0x00,0xFF,0xE0,0x52,0x40,0x89,0x20,0x00,0x00,0x04,0x00,0x08,0x00,0x7F,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0xC0,0x00,0x00,0x00,0x40,0xF8,0x40,0x08,0x40,0x4F,0xE0,0x28,0x40,0x12,0x40,0x11,0x40,0x29,0x40,0x48,0x40,0x88,0x40,0x01,0xC0,0x00,0x00,0x04,0x00,0xFF,0xE0,0x29,0x80,0x49,0x40,0x91,0x20,0x67,0x00,0x11,0x00,0xFF,0xE0,0x11,0x00,0x21,0x00,0xC1,0x00,0x00,0x00,0xF9,0x00,0x89,0x00,0xA9,0xE0,0xA9,0x00,0xA9,0x00,0xAB,0xE0,0xAA,0x20,0xAA,0x20,0x52,0x20,0x4B,0xE0,0x82,0x20,0x00,0x00,0x3F,0x80,0x20,0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,0x00,0x03,0xC0,0xFC,0x00,0x04,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0xFF,0xE0,0x04,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x00,0x00,0x95,0x00,0x59,0x00,0xFD,0xE0,0x32,0x40,0x5A,0x40,0x95,0x40,0x21,0x40,0xFC,0x80,0x48,0x80,0x39,0x40,0xC6,0x20,0x00,0x00,0x27,0xC0,0x24,0x40,0xF7,0xC0,0x24,0x40,0x37,0xC0,0x60,0x00,0xAF,0xE0,0x25,0x00,0x25,0xC0,0x2B,0x00,0xF1,0xE0,0x00,0x00,0x7F,0xC0,0x00,0x80,0x01,0x00,0x06,0x00,0x04,0x40,0xFF,0xE0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x00,0x00,0x04,0x00,0x07,0xC0,0x04,0x00,0x04,0x00,0x3F,0x80,0x20,0x80,0x20,0x80,0x3F,0x80,0x00,0x00,0x49,0x40,0xC9,0x20,0x00,0x00,0x02,0x00,0xFB,0xC0,0x24,0x80,0x4F,0xE0,0x75,0x20,0xD7,0xE0,0x55,0x20,0x57,0xE0,0x75,0x20,0x55,0x20,0x09,0x60,0x00,0x00,0x04,0x00,0x7F,0xE0,0xC0,0x20,0x00,0x00,0x7F,0xC0,0x04,0x00,0x24,0x00,0x27,0xC0,0x34,0x00,0x4C,0x00,0x83,0xE0,0x00,0x00,0x00,0x40,0xFF,0xE0,0x22,0x00,0x22,0x00,0x3A,0x60,0x4B,0x80,0xAA,0x00,0x12,0x00,0x22,0x20,0x42,0x20,0x81,0xE0,0x00,0x00,0x04,0x00,0xFF,0xE0,0x80,0x20,0x3F,0x80,0x00,0x00,0x00,0x00,0xFF,0xE0,0x12,0x00,0x12,0x20,0x22,0x20,0xC3,0xE0,0x00,0x00,0x02,0x80,0x02,0x40,0x7F,0xE0,0x42,0x00,0x42,0x40,0x7A,0x40,0x4A,0x80,0x49,0x00,0x69,0x20,0x52,0xA0,0x84,0x60,0x00,0x00,0x10,0x80,0x09,0x00,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,0x0A,0x00,0x11,0x00,0x20,0x80,0xC0,0x60,0x00,0x00,0x27,0xE0,0x10,0x20,0x42,0x20,0x42,0x20,0x7F,0xA0,0x46,0x20,0x4A,0x20,0x52,0x20,0x62,0x20,0x4E,0x20,0x40,0xE0,0x00,0x00,0x71,0x00,0x55,0x00,0x55,0x00,0x77,0xE0,0x59,0x00,0x51,0x00,0x77,0xE0,0x51,0x00,0x51,0x00,0x91,0x00,0xBF,0xE0,0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x24,0x80,0xC4,0x60,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,};voidLine(intx1,inty1,intx2,inty2,intcolor){intdr;floatr,c,k;r=y2-y1;c=x2-x1;if(abs(r)>abs(c)){if(r!=0){k=c/r;if(r>0)for(dr=0;dr<=r;dr+=1)putpixel(x1+dr*k+0.5,y1+dr,color);if(r<0)for(dr=0;dr<=-r;dr+=1)putpixel(x2+dr*k+0.5,y2+dr,color);}else{if(c>0)for(dr=0;dr<=r;dr+=1)putpixel(x1+dr,y1,color);if(c<0)for(dr=r;dr<=0;dr+=1)putpixel(x1+dr,y1,color);}}else{if(c!=0){k=r/c;if(c>0)for(dr=0;dr<=c;dr+=1)putpixel(x1+dr,y1+dr*k+0.5,color);if(c<0)for(dr=0;dr<=-c;dr+=1)putpixel(x2+dr,y2+dr*k+0.5,color);}else{if(r>0)for(dr=0;dr<=r;dr+=1)putpixel(x1,y1+dr,color);if(r<0)for(dr=r;dr<=0;dr+=1)putpixel(x1,y1+dr,color);}}}voidBar(intlx,intly,intrx,intry,intecolor){Line(lx,ly,rx,ly,ecolor);Line(rx,ly,rx,ry,ecolor);Line(rx,ry,lx,ry,ecolor);Line(lx,ry,lx,ly,ecolor);floodfill(lx+(rx-lx)/2,ly+(ry-ly)/2,ecolor);}voidOutCh(char*mat,intmatsize,intx,inty,intcolor){inti,j,k,n;n=(matsize-1)/8+1;for(j=0;j<matsize;j++)for(i=0;i<n;i++)for(k=0;k<8;k++)if(mat[j*n+i]&(0x80>>k))putpixel(x+i*8+k,y+j,color);}voidDrawCircle(intx,inty,intr,intecolor,intfcolor){setcolor(ecolor);circle(x,y,r);setfillstyle(1,fcolor);floodfill(x,y,ecolor);}voidDrawWindow(){inti;setfillstyle(1,1);Bar(0,0,639,20,1);setfillstyle(1,7);Bar(0,20,639,479,1);setfillstyle(1,14);Bar(50,50,450,450,8);for(i=0;i<19;i++)Line(Pos[i],Pos[0],Pos[i],Pos[18],0);for(i=0;i<19;i++)Line(Pos[0],Pos[i],Pos[18],Pos[i],0);setcolor(0);for(i=0;i<3;i++){circle(Pos[9],Pos[3+i*6],2);circle(Pos[3],Pos[3+i*6],2);circle(Pos[15],Pos[3+i*6],2);}DrawCircle(10,10,8,15,8);DrawCircle(19,10,8,8,15);setfillstyle(1,6);Bar(555,50,605,100,9);Bar(475,50,525,100,9);DrawCircle(580,75,8,8,0);DrawCircle(500,75,8,8,15);for(i=0;i<4;i++)OutCh(mat[i],12,30+i*13,5,15);for(i=4;i<6;i++)OutCh(mat[i],12,150+i*13,5,15);for(i=6;i<8;i++)OutCh(mat[i],12,230+i*13,5,15);OutCh(mat[10],12,480,400,15);OutCh(mat[5],12,493,400,15);for(i=11;i<14;i++)OutCh(mat[i],12,520+(i-11)*13,400,15);OutCh(mat[9],12,560,400,15);for(i=14;i<16;i++)OutCh(mat[i],12,590+(i-14)*13,400,15);for(i=8;i<10;i++)OutCh(mat[i],12,530+(i-8)*13,110,15);OutCh(mat[19],12,590,130,15);OutCh(mat[19],12,510,130,15);for(i=16;i<18;i++)OutCh(mat[i],12,580+(i-16)*13,5,15);setcolor(15);outtextxy(230,6,"[6.5]");}voidOnPos(MOUSEH*ht,intrm[3]){inti,r,c;r=(ht->my+3-Pos[0])/20;c=(ht->mx+3-Pos[0])/20;rm[0]=-1;if(ht->mx>=Pos[c]-3&&ht->mx<=Pos[c]+3&&ht->my>=Pos[r]-3&&ht->my<=Pos[r]+3){rm[0]=1;rm[1]=r;rm[2]=c;}}voidDrawStr(intr,intc){intt;t=Rear-1;if(Rear>0&&QiZiBF[t].f==1){setfillstyle(1,14);Line(Pos[QiZiBF[t].c]-10,Pos[QiZiBF[t].r]-10,Pos[QiZiBF[t].c]-10,Pos[QiZiBF[t].r]-6,14);Line(Pos[QiZiBF[t].c]-10,Pos[QiZiBF[t].r]-10,Pos[QiZiBF[t].c]-6,Pos[QiZiBF[t].r]-10,14);Line(Pos[QiZiBF[t].c]-10,Pos[QiZiBF[t].r]-6,Pos[QiZiBF[t].c]-6,Pos[QiZiBF[t].r]-10,14);floodfill(Pos[QiZiBF[t].c]-9,Pos[QiZiBF[t].r]-9,14);}setfillstyle(1,4);Line(Pos[c]-10,Pos[r]-10,Pos[c]-10,Pos[r]-6,4);Line(Pos[c]-10,Pos[r]-10,Pos[c]-6,Pos[r]-10,4);Line(Pos[c]-10,Pos[r]-6,Pos[c]-6,Pos[r]-10,4);floodfill(Pos[c]-9,Pos[r]-9,4);}intMouseInit(intXmin,intXmax,intYmin,intYmax){intretcode;unionREGSregs;regs.x.ax=0;int86(51,®s,®s);retcode=regs.x.ax;if(retcode==0)return0;regs.x.ax=7;regs.x.cx=Xmin;regs.x.dx=Xmax;int86(51,®s,®s);regs.x.ax=8;regs.x.cx=Ymin;regs.x.dx=Ymax;int86(51,®s,®s);returnretcode;}voidHideMouse(MOUSEH*hw){inti,j;for(i=0;i<16;i++)for(j=0;j<16;j++)putpixel(hw->mx-8+j,hw->my-8+i,hw->bf[i][j]);}voidMouseRead(MOUSEH*hd){unionREGSr1;intdx,dy,ky;do{r1.x.ax=3;int86(51,&r1,&r1);dx=r1.x.cx;dy=r1.x.dx;hd->mkey=r1.x.bx;}while(dx==hd->mx&&dy==hd->my&&!hd->mkey);HideMouse(hd);hd->mx=r1.x.cx;hd->my=r1.x.dx;}voidDrawMouse(MOUSEH*ht){inti,j;for(i=0;i<16;i++)for(j=0;j<16;j++)ht->bf[i][j]=getpixel(ht->mx-8+j,ht->my-8+i);Line(ht->mx,ht->my-3,ht->mx,ht->my+3,4);Line(ht->mx-3,ht->my,ht->mx+3,ht->my,4);}voidInit(){inti,j;for(i=0;i<19;i++)for(j=0;j<19;j++){BOXBF[i][j].n=0;BOXBF[i][j].l=-1;}}voidOut_Nb(intr,intc){intn0,n10,n100,n,cr;if(BOXBF[r][c].s==BLACKQI)cr=15;elsecr=0;if(Rear+1<10)OutCh(Nb[Rear+1],8,Pos[c]-2,Pos[r]-2,cr);if(Rear+1>=10&&Rear<100){n0=(Rear+1)%10;n=(Rear+1)/10;n10=n%10;OutCh(Nb[n10],8,Pos[c]-4,Pos[r]-2,cr);OutCh(Nb[n0],8,Pos[c]+2,Pos[r]-2,cr);}if(Rear+1==100)OutCh(N100,16,Pos[c]-9,Pos[r]-2,cr);if(Rear+1>100){n0=(Rear+1)%10;n=(Rear+1)/10;n10=n%10;n100=(Rear+1)/100;OutCh(Nb[n100],8,Pos[c]-7,Pos[r]-2,cr);OutCh(Nb[n10],8,Pos[c]-2,Pos[r]-2,cr);OutCh(Nb[n0],8,Pos[c]+3,Pos[r]-2,cr);}}voidOutNumber(intx,inty,intnumber,intcolor){charn[10];sprintf(n,"%d",number);setcolor(color);outtextxy(x,y,n);}voidDrawRect(intr,intc){intl,color;BOXBF[r][c].n=0;BOXBF[r][c].f=0;for(l=0;l<=Rear;l++)if(QiZiBF[l].r==r&&QiZiBF[l].c==c&&QiZiBF[l].s==BOXBF[r][c].s&&QiZiBF[l].f==1)QiZiBF[l].f=0;if(BOXBF[r][c].s==BLACKQI)color=15;elsecolor=0;setfillstyle(1,color);Line(Pos[c]-4,Pos[r]-4,Pos[c]-4,Pos[r]+4,8);Line(Pos[c]-4,Pos[r]+4,Pos[c]+4,Pos[r]+4,8);Line(Pos[c]+4,Pos[r]+4,Pos[c]+4,Pos[r]-4,8);Line(Pos[c]+4,Pos[r]-4,Pos[c]-4,Pos[r]-4,8);floodfill(Pos[c],Pos[r],8);}voidClear_Circle(intr,intc){inti;DrawCircle(Pos[c],Pos[r],9,9,14);setcolor(14);circle(Pos[c],Pos[r],9);if(r==0){if(c==0){Line(Pos[c],Pos[r],Pos[c],Pos[r]+9,0);Line(Pos[c],Pos[r],Pos[c]+9,Pos[r],0);}elseif(c==18){Line(Pos[c],Pos[r],Pos[c],Pos[r]+9,0);Line(Pos[c],Pos[r],Pos[c]-9,Pos[r],0);}else{Line(Pos[c],Pos[r],Pos[c],Pos[r]+9,0);Line(Pos[c]+8,Pos[r],Pos[c]-9,Pos[r],0);}}if(r==18){if(c==0){Line(Pos[c],Pos[r],Pos[c],Pos[r]-9,0);Line(Pos[c],Pos[r],Pos[c]+9,Pos[r],0);}elseif(c==18){Line(Pos[c],Pos[r],Pos[c],Pos[r]-9,0);Line(Pos[c],Pos[r],Pos[c]-9,Pos[r],0);}else{Line(Pos[c],Pos[r],Pos[c],Pos[r]-9,0);Line(Pos[c]+9,Pos[r],Pos[c]-9,Pos[r],0);}}if(c==0&&r>0&&r<18){Line(Pos[c],Pos[r]-9,Pos[c],Pos[r]+9,0);Line(Pos[c],Pos[r],Pos[c]+9,Pos[r],0);}if(c==18&&r>0&&r<18){Line(Pos[c],Pos[r]-9,Pos[c],Pos[r]+9,0);Line(Pos[c],Pos[r],Pos[c]-9,Pos[r],0);}if(r>0&&r<18&&c>0&&c<18){Line(Pos[c],Pos[r]-9,Pos[c],Pos[r]+9,0);Line(Pos[c]+9,Pos[r],Pos[c]-9,Pos[r],0);setcolor(0);if((r==3&&c==3)||(r==3&&c==9)||(r==3&&c==15))circle(Pos[c],Pos[r],2);if((r==9&&c==3)||(r==9&&c==9)||(r==9&&c==15))circle(Pos[c],Pos[r],2);if((r==15&&c==3)||(r==15&&c==9)||(r==15&&c==15))circle(Pos[c],Pos[r],2);}}voidOutScore(){inti,j,ws=0,bs=0,k;floats;charcn[10];for(i=0;i<19;i++){k=0;for(j=0;j<19;j++){if(BOXBF[i][j].n==0)k++;if(BOXBF[i][j].n==1&&BOXBF[i][j].s==BLACKQI){bs+=k+1;k=0;}if(BOXBF[i][j].n==1&&BOXBF[i][j].s==WHITEQI){ws+=k+1;k=0;}if(j==18&&BOXBF[i][18].n==0){if(BOXBF[i][18-k].s==BLACKQI)bs+=k;if(BOXBF[i][18-k].s==WHITEQI)ws+=k;}}}k=bs-ws;s=2*k-6.5;setfillstyle(1,9);Bar(470,250,615,310,6);setcolor(4);if(s<0){s=-s;sprintf(cn,"%.1f",s);OutCh(mat[1],12,480,280,15);OutCh(mat[18],12,493,280,15);outtextxy(530,280,cn);OutCh(mat[5],12,570,280,15);}else{sprintf(cn,"%.1f",s);OutCh(mat[0],12,480,280,15);OutCh(mat[18],12,493,280,15);outtextxy(530,280,cn);OutCh(mat[5],12,570,280,15);}}intGet_QI(intr,intc){intt=0;if(r>0)if(BOXBF[r-1][c].n==0)t++;if(r<18)if(BOXBF[r+1][c].n==0)t++;if(c>0)if(BOXBF[r][c-1].n==0)t++;if(c<18)if(BOXBF[r][c+1].n==0)t++;returnt;}voidSelectLists(intr,intc){inti,j,k;if(r>0)if(BOXBF[r-1][c].n==1&&BOXBF[r-1][c].s==BOXBF[r][c].s)BOXBF[r][c].l=BOXBF[r-1][c].l;if(r<18){if(BOXBF[r+1][c].n==1&&BOXBF[r+1][c].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r+1][c].l){k=BOXBF[r+1][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r+1][c].l;}}}if(c>0){if(BOXBF[r][c-1].n==1&&BOXBF[r][c-1].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r][c-1].l){k=BOXBF[r][c-1].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c-1].l;}}}if(c<18){if(BOXBF[r][c+1].n==1&&BOXBF[r][c+1].s==BOXBF[r][c].s){if(BOXBF[r][c].l<BOXBF[r][c+1].l){k=BOXBF[r][c+1].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c].l;}else{k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].l==k)BOXBF[i][j].l=BOXBF[r][c+1].l;}}}}intGetListsQI(intr,intc,inttq){inti,j,k,mq=0;for(i=0;i<19;i++)for(j=0;j<19;j++){if(BOXBF[i][j].l==BOXBF[r][c].l&&BOXBF[i][j].s==tq)mq+=BOXBF[i][j].q;}returnmq;}voidDetectQi(){inti,j;for(i=0;i<19;i++)for(j=0;j<19;j++)if(BOXBF[i][j].n==1)BOXBF[i][j].q=Get_QI(i,j);}voidShowCircle(intr,intc,inttq){intcolor;BOXBF[r][c].n=1;BOXBF[r][c].s=tq;BOXBF[r][c].f=1;BOXBF[r][c].l=Rear;Rear++;QiZiBF[Rear].r=r;QiZiBF[Rear].c=c;QiZiBF[Rear].s=tq;QiZiBF[Rear].f=1;SelectLists(r,c);if(tq==BLACKQI)color=0;elsecolor=15;DrawCircle(Pos[c],Pos[r],9,8,color);Out_Nb(r,c);DrawStr(r,c);}voidHideCircle(intr,intc,inthq){inti,j,h,l,k;OutNumber(480,130,Mz[0],7);OutNumber(560,130,Mz[1],7);k=BOXBF[r][c].l;for(i=0;i<19;i++)for(j=0;j<19;j++){if(BOXBF[i][j].l==k&&BOXBF[i][j].s==BOXBF[r][c].s&&BOXBF[i][j].f==1){Clear_Circle(i,j);BOXBF[i][j].n=0;BOXBF[i][j].f=0;if(hq==BLACKQI)Mz[0]+=1;elseMz[1]+=1;for(l=0;l<=Rear;l++)if(QiZiBF[l].r==i&&QiZiBF[l].c==j&&QiZiBF[l].s==hq&&QiZiBF[l].f==1)QiZiBF[l].f=0;}}OutNumber(480,130,Mz[0],15);OutNumber(560,130,Mz[1],15);}intSelect(intr,intc,inttq,inthq){BOXBF[r][c].n=1;DetectQi();if(r>0){if(BOXBF[r-1][c].s==tq){if(GetListsQI(r-1,c,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r-1,c,hq)==0){HideCircle(r-1,c,hq);ShowCircle(r,c,tq);return0;}}}if(r<18){if(BOXBF[r+1][c].s==tq){if(GetListsQI(r+1,c,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r+1,c,hq)==0){HideCircle(r+1,c,hq);ShowCircle(r,c,tq);return0;}}}if(c>0){if(BOXBF[r][c-1].s==tq){if(GetListsQI(r,c-1,tq)>0){ShowCircle(r,c,tq);return0;}}else{if(GetListsQI(r,c-1,hq)==0){HideCircle(r,c-1,hq);ShowCircle(r

温馨提示

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

评论

0/150

提交评论