我的五子棋源程式,還不夠厲害,誰能繼續完善 (轉)
/* By ZhouDahua. 1999,3,30 */
/*TC2.0*/
#include
#include
#include
#include
#include
#include
#define DOWN 80
#define UP 72
#define F1 59
#define LEFT 75
#define RIGHT 77
#define Q 16
#define E 18
#define X 45
#define R 19
#define ESC 1
#define ENTER 28
int judge(int);
int getkey();
void dec();
void count(int,int,int);
void sd();
int tx,ty;
int a[16][16]={0}, b[16][16]={0}; /* 全域性變數 */
void main()
{
int x,y,m,n,h=0,s=0,done; int hx=150,sy=80;
int ch;
void *buf_curse;
unsigned size;
int graph=DETECT;
int graphmode;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode," ");
begin:sd();
for(x=0;x<16;x++)
for(y=0;y<16;y++) a[x][y]=0;
setfillstyle(1,13);
bar(0,0,12,12);
size=imagesize(0,0,12,12);
buf_curse=malloc(size);
getimage(0,0,12,12,buf_curse); /* save imag 儲存圖象 */
putimage(0,0,buf_curse,XOR_PUT);
tx=1000,ty=1000;
cleardevice();
setcolor(WHITE);
h=0;s=0;hx=154;sy=84;
setfillstyle(1,CYAN);
bar(0,0,639,510);
setfillstyle(1,BLACK);
bar(157,87,483,413);
/* setfillstyle(1,DARKGRAY);
bar(157,87,483,413);
*/ setfillstyle(1,4);/*BROWN); */
bar(147,77,473,403);
setfillstyle(1,LIGHTGRAY);
bar(151,81,469,399);
for(x=160;x<=460;x+=20)
line(x,90,x,390);
for(y=90;y<=390;y+=20)
line(160,y,460,y); /* SETUP FACE */
putimage(154,84,buf_curse,XOR_PUT); /* xor option*/
setfillstyle(1,13);
bar(150,420,470,460); /* */
setfillstyle(1,BLACK);
bar(153,460,475,467);
bar(470,424,475,467);
setfillstyle(1,13);
setcolor(YELLOW);
outtextxy(160,430,"WZQ program By ZhouDahua 1999-5-1.");
outtextxy(160,448,"V1.3A");
setcolor(10);
outtextxy(500,100,"R to res");
outtextxy(500,120,"Esc to quit");
outtextxy(500,140,"Q or Enter to put");
outtextxy(500,160,"Enter to put down");
/* outtextxy(50,110,"Please:"); */
wait: do{ done=1;
ch=getkey();
switch(ch)
{ case 76 :
case DOWN:
{putimage(hx,sy,buf_curse,XOR_PUT);
if(s==15) s=0;
else s+=1;
sy=84+s*20;
putimage(hx,sy,buf_curse,XOR_PUT);
break;
}
case UP:
{putimage(hx,sy,buf_curse,XOR_PUT);
if(s==0) s=15;
else s-=1;
sy=84+s*20;
putimage(hx,sy,buf_curse,XOR_PUT);
break;
}
case LEFT:
{putimage(hx,sy,buf_curse,XOR_PUT);
if(h==0) h=15;
else h-=1;
hx=154+h*20;
putimage(hx,sy,buf_curse,XOR_PUT);
break;
}
case RIGHT:
{putimage(hx,sy,buf_curse,XOR_PUT);
if(h==15) h=0;
else h+=1;
hx=154+h*20;
putimage(hx,sy,buf_curse,XOR_PUT);
break;}
case R:
{putimage(hx,sy,buf_curse,XOR_PUT);
setcolor(WHITE); goto begin; }
case X:
case E:
case ESC: goto end;
case Q:
case ENTER: done=0;break;
}
} while(done);
if(a[h][s]!=0) { bar(150,420,470,460);setcolor(10);
outtextxy(160,430,"You do not put it here!");sd(); goto wait;}
a[h][s]=1;
for(x=6;x>0;x--)
{ setcolor(13);
circle(160+h*20,90+s*20,x);}
if(judge(1)) { bar(150,420,470,460);setcolor(YELLOW);
outtextxy(160,430,"Wokao You Win ! ");
outtextxy(160,445,"Press R to again"); sd();
aa: if(getch()!='r') {sd();goto aa;}
putimage(hx,sy,buf_curse,XOR_PUT); setcolor(WHITE);
goto begin; }
decide(a);
if(judge(2)) { bar(150,420,470,460);setcolor(YELLOW);
outtextxy(160,430,"Sorry, You Fail ");
outtextxy(160,445,"Press R to again "); sd();
bb: if(getch()!='r') {sd();goto bb;}
putimage(hx,sy,buf_curse,XOR_PUT); setcolor(WHITE);
goto begin; }
goto wait;
end:
closegraph(); free(buf_curse);
for(h=0;h<1;h++) {sd();delay(800);}
}
/***********************************/
void decide(arr)
int arr[16][16];
{
int i,j,x,y,l,l1,l2,l3,l4;
int max_1,max_2,n=1,m=2;
int x_1=0,y_1=0; int x_2=0,y_2=0;
for(i=6;i>0;i--)
{setcolor(15);
circle(tx,ty,i);}
see: for(i=0;i<16;i++)
for(j=0;j<16;j++) b[i][j]=0;
for(i=0;i<16;i++)
for(j=0;j<16;j++)
if(arr[i][j]==0)
{ for(x=i,y=j,l1=0;arr[x][y+1]==n&&y<15;y++)l1+=2;
if(arr[x][y+1]==m) l1--;
for(x=i,y=j; arr[x][y-1]==n&&y>0;y--) l1+=2;
if(arr[x][y-1]==m) l1--;
count(l1,i,j);
for(x=i,y=j,l2=0;arr[x+1][y-1]==n&&x<15&&y>0;x++,y--) l2+=2;
if(arr[x+1][y-1]==m)l2--;
for(x=i,y=j; arr[x-1][y+1]==n&&x>0&&y<15;x--,y++) l2+=2;
if(arr[x-1][y+1]==m)l2--;
count(l2,i,j);
for(x=i,y=j,l3=0;arr[x+1][y+1]==n&&x<15&&y<15;x++,y++) l3+=2;
if(arr[x+1][y+1]==m)l3--;
for(x=i,y=j; arr[x-1][y-1]==n&&x>0&&y>0;x--,y--) l3+=2;
if(arr[x-1][y-1]==m)l3--;
count(l3,i,j);
for(x=i,y=j,l4=0;arr[x+1][y]==n&&x<15;x++) l4+=2;
if(arr[x+1][y]==m)l4--;
for(x=i,y=j; arr[x-1][y]==n&&x>0;x--) l4+=2;
if(arr[x-1][y]==m)l4--;
count(l4,i,j);
}
if(n==1)
{ max_1=b[0][0];
for(i=0;i<16;i++)
for(j=0;j<16;j++)
if(b[i][j]>=max_1)
{max_1=b[i][j];
x_1=i;
y_1=j;
}
n++; m--;
goto see;
}
if(n==2)
{ max_2=b[0][0];
for(i=0;i<16;i++)
for(j=0;j<16;j++)
if(b[i][j]>=max_2) {max_2=b[i][j]; x_2=i;y_2=j;} n++;m--; }
if(max_2>=90||(max_1<90&&max_2>=50)||max_2>=max_1)
{x_1=x_2; y_1=y_2;}
tx=160+x_1*20;ty=90+y_1*20;
for(i=6;i>0;i--)
{setcolor(15);if(i<3)setcolor(BLACK);
circle(tx,ty,i);}
arr[x_1][y_1]=2;
}
void count(int l,int i,int j)
{
switch(l)
{
case -1:
case 0: break;
case 1: b[i][j]+=2; break; /*2*/
case 2: b[i][j]+=4; break; /*4*/
case 3: b[i][j]+=7; break;
case 4: b[i][j]+=10; break;
case 5: b[i][j]+=13; break;
case 6: b[i][j]+=50; break;
case 7:
case 8: b[i][j]+=95; break;
case 9:
case 10:
case 11:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18: b[i][j]+=150;
default: b[i][j]+=0; break;
}
}
int judge(int n)
{
int i,j,x,y,ju=0,l1,l2,l3,l4;
for(i=0;i<16;i++)
for(j=0;j<16;j++)
if(a[i][j]==n)
{for(x=i,y=j,l1=1;a[x][y+1]==n&&y<15;y++) l1++;
if(l1>=5) {ju=1;goto re;}
for(x=i,y=j,l2=1;a[x+1][y-1]==n&&x<15&&y>0;x++,y--) l2++;
if(l2>=5) {ju=1;goto re;}
for(x=i,y=j,l3=1;a[x+1][y+1]==n&&x<15&&y<15;x++,y++) l3++;
if(l3>=5) {ju=1;goto re;}
for(x=i,y=j,l4=1;a[x+1][y]==n&&x<15;x++) l4++;
if(l4>=5) {ju=1;goto re;}
}
re: if(i!=16&&j!=16) {setcolor(WHITE);circle(160+i*20,90+j*20,10);}
return(ju);
}
int getkey()
{union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}
void sd()
{sound(720);delay(3500);nosound();}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-953201/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我真厲害
- 如果有一天程式設計師不見了,生活還能繼續嗎程式設計師
- Hazelcast和Redis打口水仗:誰的效能更厲害?- hazelcastASTRedis
- 全球最厲害的 14 位程式設計師,請收下我的膝蓋~程式設計師
- 有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!行程編譯
- 各種分割線Html程式碼(厲害)HTML
- 全球最厲害的14位程式設計師程式設計師
- 行行AI直播:OpenAI管理層“爆炸”GPTs的故事還能繼續?OpenAIGPT
- AI 全面入侵,程式設計師到了 2040 年還能繼續敲程式碼嗎?AI程式設計師
- 奧運會結束了,生活還要繼續,工作還要繼續...
- exit() 時或之後還能繼續執行php程式碼的幾種辦法PHP
- Mark Andreessen:我相信比特幣,還會繼續投資比特幣
- 普通程式設計師和厲害程式設計師的差距!程式設計師
- GlobalSign證書過期不續費還可繼續訪問嗎
- 去創業還是繼續程式設計創業程式設計
- “探店”低程式碼——它真的很厲害?
- 誰能夠提供jive的turbine的實現版本。
- 誇一誇支付寶小程式的厲害之處
- 我用VJ基本完成了一個四國象棋網路程式,因時間關係,不能繼續,誰幫我完成? (轉)
- Supercell的遊戲奇蹟還在繼續遊戲
- Red Hat:SUN在開源路上還遠遠不夠
- 這 14 位全球最厲害的程式設計師,就這樣收割了我的膝蓋~程式設計師
- 你以為AlphaGo只是下圍棋厲害?不,它還能用來優化金融交易策略引數Go優化
- 我希望我56歲的時候還能程式設計程式設計
- 正在尋求像你一樣厲害的 GopherGo
- WINDOWS能夠自動載入程式的位置(轉)Windows
- 雲資料庫時代,誰能夠執牛耳?資料庫
- 文字分析能夠完善企業知識管理模式模式
- (轉)使applet能夠訪問本地資源......APP
- 2019 為什麼我們還會繼續使用 PHP ?PHP
- 掌握了開源框架還不夠,你更需要掌握原始碼框架原始碼
- java繼續革命(轉)Java
- 邦芒面試:最厲害的面試技巧都有哪些面試
- 甲骨文說,我們還會繼續發展 Java EE,當然,還有云Java
- 疫情期間沒工作的我,在家研發我的家族網站(中華義門陳氏--百犬同槽),繼續完善中...網站
- 再厲害的魔術也比不上真正的reduxRedux
- 啥是全棧程式設計師?更厲害?更有錢途?全棧程式設計師
- 為什麼寫程式碼讓人家覺得你很厲害?