C語言圍棋對(duì)弈程序設(shè)計(jì)_第1頁
C語言圍棋對(duì)弈程序設(shè)計(jì)_第2頁
C語言圍棋對(duì)弈程序設(shè)計(jì)_第3頁
C語言圍棋對(duì)弈程序設(shè)計(jì)_第4頁
C語言圍棋對(duì)弈程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語言圍棋對(duì)弈程序設(shè)計(jì)用C語言編寫一個(gè)圍棋對(duì)弈棋室的程序,模仿兩人對(duì)弈的過程,其中包括自動(dòng)提子功能,和自動(dòng)點(diǎn)目功能。1、圍棋的一些基本常識(shí):(1)圍棋棋子的“氣”見右圖1所示黑棋1有4“氣”,分別是水平方向上的左右各有一氣,垂直方向上的上下各有一氣,對(duì)角上的不是它的氣。圖1棋子外“氣”(2)提子(吃子),當(dāng)下在棋盤上的棋子沒有外氣時(shí)便被提掉(死棋)。圖2、打吃狀態(tài)圖3、提子圖2中黑1和白2都只有一口外氣,圖3黑先下7位白2沒有外氣被提掉。圖4、倒撲提子過程圖5死穴圖4演示了倒撲提子全過程,圖中左上為原型,左下黑先黑41撲,右上白64提,右下黑93反提把白棋全吃掉。(3)死穴:上圖5黑1、3、5、7四顆黑子中間交差點(diǎn)對(duì)白棋來說是死穴,白棋下不進(jìn)處,但對(duì)黑棋不影響可下見圖下方。2、自動(dòng)提子功能實(shí)現(xiàn)下在棋盤上的棋子同類別的在某一方位上可能是一顆或是一片(縱橫連續(xù)的),要實(shí)現(xiàn)自動(dòng)提子首要的是計(jì)算清楚這些同類棋子的所有外氣是多少,如果已經(jīng)沒有外氣提掉。一顆棋子下在棋盤上最多有4口外氣(見圖1),在邊上有3氣,在角上只有2氣。在程序中對(duì)于每一顆棋子檢測(cè)外氣描述如下:檢測(cè)棋子可能有的方向上(上、下、左、右)是否有棋子,如果有,那么在該方向上沒有外氣。如果在所有的方向上都有棋子,那么它在棋盤上是無外氣的。如果在它所有方向上沒有同類棋子而且又無外氣,那么該顆棋子可以提掉(見圖3)。如果在某一方向上有同類棋子,必須計(jì)算完連在一起同類的所有外氣。如果整片無外氣,該片可以提掉(見圖4)。為了方便操作,在程序中對(duì)棋子定義了數(shù)據(jù)結(jié)構(gòu):typedefstruct{intr;//行號(hào)intc;//列號(hào)ints;//棋類別intf;//棋子存活期intq;//棋子外氣數(shù)intl;//棋子隊(duì)列號(hào)intn;//有無棋子}QZ;QZQiZiBF[400];QZBOXBF[19][19];檢測(cè)棋盤上某一位置的外氣實(shí)現(xiàn)函數(shù):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;}為了更好的計(jì)算棋子的外氣,把同類連在一起的棋子(縱橫方向相連)編成一個(gè)列隊(duì),就是用一個(gè)統(tǒng)一的代號(hào)表示它們。這是實(shí)現(xiàn)自動(dòng)提子的關(guān)鍵所在,因?yàn)橹灰业狡渲幸活w棋子,根據(jù)代號(hào)就能找到全部。在程序中用下函數(shù)描述: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;}}}}檢測(cè)每顆棋子外氣的函數(shù):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);}計(jì)算整個(gè)列隊(duì)的外氣函數(shù):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、自動(dòng)點(diǎn)目功能的實(shí)現(xiàn)當(dāng)棋局收完官子,把所有可下的地方下完,把雙方盤面上的死子清除后逐行掃描棋盤。如果行開始無棋子,當(dāng)遇到棋子時(shí)前面的空為該類棋子的實(shí)空。如果行末無棋子,該行最大行號(hào)減空地?cái)?shù)為何棋子實(shí)空為它所有。各方實(shí)空加同類在棋盤上有效棋子數(shù)為各方總棋子數(shù)。黑棋數(shù)減白棋數(shù)乘以2減貼目數(shù)為該局的最后結(jié)果。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、棋子能下在棋盤上某一位置的條件首先當(dāng)前準(zhǔn)備下子的位置沒有棋子存在。其次是當(dāng)前準(zhǔn)備下子的位置如果有外氣能下子,如果沒有外氣,那么分為兩種情況。一是當(dāng)前準(zhǔn)備下子位置在能有的方向上的棋子種類一樣并且與準(zhǔn)備下的棋子種類不一樣,得該位置不能下子,如圖5所示黑棋1、3、5、7中間的位置白棋不能下。二是當(dāng)前準(zhǔn)備下子位置在能有的方向上棋子種類不一樣,此時(shí)又分幾種情況:一檢測(cè)在能有方向上同類除了當(dāng)前位置的外氣外是否還有外氣,如果有此處能下子,如果沒有此處暫時(shí)不能下子,同時(shí)檢測(cè)在能有的方向上不同類棋子除了當(dāng)前位置外氣外是否另有外氣,如果有此處不能下子,如果無,那么此處能下子并且把沒有外氣的不同類棋子提掉(吃掉)。實(shí)現(xiàn)函數(shù):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);}}以上兩個(gè)函數(shù)很重要,在程序中是核心部分,對(duì)自動(dòng)提子功能起到?jīng)Q定條件之一。程序用Win-TC(1.9)編譯器編寫編譯完成,整個(gè)過程用鼠標(biāo)完成操作。下圖為圍棋對(duì)弈室操作界面。程序可在液晶顯示器上正常顯示圖形圖6、程序操作界面圖6為程序中設(shè)計(jì)的圍棋對(duì)弈室操作界面,界面中共有4個(gè)按鈕,各功能如下所示:關(guān)閉――――――退出返回操作系統(tǒng)點(diǎn)目――――――收完官后計(jì)算結(jié)果確定死子――――點(diǎn)擊此處后可用鼠標(biāo)左鍵選定死子并點(diǎn)擊該子完成――――――點(diǎn)擊此處完成確定死子整個(gè)過程圖7、自動(dòng)點(diǎn)目(白勝,貼目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;//行號(hào)intc;//列號(hào)ints;//棋類別intf;//棋子存活期intq;//棋子外氣數(shù)intl;//棋子隊(duì)列號(hào)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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論