




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、# include<stdio.h># include<string.h># include<stdlib.h># define SPA 0# define MAN 1# define COM 2 /* 空位置設(shè)為0 ,玩家下的位置設(shè)為1 ,電腦下的位置設(shè)為2 */int qipan1515; /* 15*15的棋盤 */int a,b,c,d,x; /* a b為玩家下子坐標(biāo) ,c d為電腦下子坐標(biāo) x為剩余空位置*/void start(); /* 程序的主要控制函數(shù) */void draw(); /* 畫棋盤 */int win(int p,int q
2、); /* 判斷勝利 p q為判斷點(diǎn)坐標(biāo) */void AI(int *p,int *q); /* 電腦下子 p q返回下子坐標(biāo) */int value(int p,int q); /* 計(jì)算空點(diǎn)p q的價(jià)值 */int qixing(int n,int p,int q); /* 返回空點(diǎn)p q在n方向上的棋型 n為1-8方向 從右順時(shí)針開始數(shù) */void yiwei(int n,int *i,int *j); /* 在n方向上對坐標(biāo) i j 移位 n為1-8方向 從右順時(shí)針開始數(shù) */void main()char k;dox=225;start();printf("還要再來一把
3、嗎?輸入y或n:"); getchar(); scanf("%c",&k);while(k!='y'&&k!='n') printf("輸入錯(cuò)誤,請重新輸入n"); scanf("%c",&k); system("cls");while(k='y');printf("謝謝使用!n");void start()int i,j,a1,b1,c1,d1,choice; /* a1 b1儲(chǔ)存玩家上手坐標(biāo) c1 d1
4、儲(chǔ)存電腦上手坐標(biāo) */char ch;printf("tn");printf("t n");printf("t 歡迎使用五子棋對戰(zhàn)程序 祝您玩的愉快挑戰(zhàn)無極限 n"); printf("t n");printf("t ._. n"); printf("t | _ | n");printf("t | I I | n");printf("t | I 五 子 棋 I | n");printf("t | I I | n");
5、printf("t | I made by 曉之蓬 I | n"); printf("t | I_I | n");printf("t !_! n"); printf("t ._. n");printf("t ._|_|_. n");printf("t |: _ | n"); printf("t | CD-ROM | n");printf("t !_! n");printf("t n");printf("t
6、n");printf("t 寒 星 溪 月 疏 星 首,花 殘 二 月 并 白 蓮。 n");printf("t 雨 月 金 星 追 黑 玉,松 丘 新 宵 瑞 山 腥。 n");printf("t 星 月 長 峽 恒 水 流,白 蓮 垂 俏 云 浦 嵐。 n");printf("t 黑 玉 銀 月 倚 明 星,斜 月 明 月 堪 稱 朋。 n");printf("t 二 十 六 局 先 棄 二,直 指 游 星 斜 彗 星。 n");printf("t n");pr
7、intf("t n");printf("t 1.人機(jī)對戰(zhàn) 2.人人對戰(zhàn) n");printf("t n");printf("tn");printf("ttt請輸入1或2:");scanf("%d",&choice); /* 選擇模式:人機(jī)或人人 */while(choice!=1&&choice!=2) printf("輸入錯(cuò)誤,請重新輸入:"); scanf("%d",&choice); if(choi
8、ce=1) /* 人機(jī)模式 */system("cls"); printf("歡迎使用五子棋人機(jī)對戰(zhàn)!下子請輸入坐標(biāo)(如13 6)。悔棋請輸入15 15。nnn"); for(j=0;j<15;j+)for(i=0;i<15;i+)qipanji=SPA; /* 置棋盤全為空 */draw();printf("先下請按1,后下請按2:");scanf("%d",&i); while(i!=1&&i!=2) printf("輸入錯(cuò)誤,請重新輸入:"); scan
9、f("%d",&i); if(i=1) /* 如果玩家先手下子 */printf("請下子:"); scanf("%d%d",&a,&b); while(a<0|a>14)|(b<0|b>14) printf("坐標(biāo)錯(cuò)誤!請重新輸入:"); scanf("%d%d",&a,&b); a1=a; b1=b; x-; qipanba=MAN; system("cls"); draw();while(x!=0)if(x
10、=225) c=7; d=7; qipandc=COM; x-; system("cls"); draw(); /* 電腦先下就下在7 7 */else AI(&c,&d); qipandc=COM; x-; system("cls"); draw(); /* 電腦下子 */c1=c; d1=d; /* 儲(chǔ)存電腦上手棋型 */if(win(c,d) /* 電腦贏 */printf("要悔棋嗎?請輸入y或n:"); getchar(); scanf("%c",&ch);while(ch!=
11、39;y'&&ch!='n') printf("輸入錯(cuò)誤,請重新輸入:"); scanf("%c",&ch); if(ch='n') printf("下不過電腦很正常,請不要灰心!n"); return; else x+=2; qipandc=SPA; qipanb1a1=SPA; system("cls"); draw(); /* 悔棋 */printf("電腦下在%d %dn請輸入:",c,d); scanf("%d%
12、d",&a,&b); /* 玩家下子 */if(a=15&&b=15) x+=2; qipandc=SPA; qipanb1a1=SPA; system("cls"); draw(); printf("請輸入:"); scanf("%d%d",&a,&b); /* 悔棋 */while(a<0|a>14)|(b<0|b>14)|qipanba!=SPA) printf("坐標(biāo)錯(cuò)誤或該位置已有子!請重新輸入:"); scanf(&quo
13、t;%d%d",&a,&b); a1=a; b1=b; x-; qipanba=MAN; system("cls"); draw();if(win(a,b) printf("電腦神馬的都是浮云!n"); return; /* 玩家贏 */printf("和局n");if(choice=2)system("cls"); printf("歡迎使用五子棋人人對戰(zhàn)!下子請輸入坐標(biāo)(如13 6)?;谄逭堓斎?5 15。nnn"); for(j=0;j<15;j+)for(i
14、=0;i<15;i+)qipanji=SPA; /* 置棋盤全為空 */draw();while(x!=0)printf("1P請輸入:"); scanf("%d%d",&a,&b);if(a=15&&b=15) x+=2; qipandc=SPA; qipanb1a1=SPA; system("cls"); draw(); printf("1P請輸入:"); scanf("%d%d",&a,&b); while(a<0|a>14
15、)|(b<0|b>14)|qipanba!=SPA) printf("坐標(biāo)錯(cuò)誤或該位置已有子!請重新輸入:"); scanf("%d%d",&a,&b); a1=a; b1=b; x-; qipanba=MAN; system("cls"); draw();printf("1P下在%d %d。n",a,b);if(win(a,b) printf("你真棒!n"); return; /* 玩家1贏 */printf("2P請輸入:"); scanf(
16、"%d%d",&c,&d);if(c=15&&d=15) x+=2; qipanba=SPA; qipand1c1=SPA; system("cls"); draw(); printf("2P請輸入:"); scanf("%d%d",&c,&d); while(c<0|c>14)|(d<0|d>14)|qipandc!=SPA) printf("坐標(biāo)錯(cuò)誤或該位置已有子!請重新輸入:"); scanf("%d%d&q
17、uot;,&c,&d); c1=c; d1=d; x-; qipandc=COM; system("cls"); draw();printf("2P下在%d %d。n",c,d);if(win(c,d) printf("你真棒!n"); return; /* 玩家2贏 */printf("和局n");void draw() /* 畫棋盤 */int i,j;char p15154;for(j=0;j<15;j+)for(i=0;i<15;i+)if(qipanji=SPA) strcpy
18、(pji," 0");if(qipanji=MAN) strcpy(pji,"0");if(qipanji=COM) strcpy(pji,"0");printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n"); printf(" n");for(i=0,j=0;i<14;i+,j+)printf(" %2d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%dn",j,pi0,pi1,pi2,pi3,pi4,pi5,pi6,
19、pi7,pi8,pi9,pi10,pi11,pi12,pi13,pi14,j);printf(" n"); printf(" 14%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s0n",p140,p141,p142,p143,p144,p145,p146,p147,p148,p149,p1410,p1411,p1412,p1413,p1414); printf(" n");printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n");int win(int p,int
20、q) /* 判斷勝利 p q為判斷點(diǎn)坐標(biāo),勝利返回1,否則返回0 */int k,n=1,m,P,Q; /* k儲(chǔ)存判斷點(diǎn)p q的狀態(tài)COM或MAN。P Q儲(chǔ)存判斷點(diǎn)坐標(biāo)。n為判斷方向。m為個(gè)數(shù)。 */P=p; Q=q;k=qipanqp;while(n!=5)m=0; while(k=qipanqp)m+;if(m=5) return 1; yiwei(n,&p,&q); if(p<0|p>14|q<0|q>14) break;n+=4; m-=1; p=P; q=Q; /* 轉(zhuǎn)向判斷 */while(k=qipanqp)m+;if(m=5) retu
21、rn 1; yiwei(n,&p,&q); if(p<0|p>14|q<0|q>14) break;n-=3; p=P; q=Q; /* 不成功則判斷下一組方向 */return 0;void AI(int *p,int *q) /* 電腦下子 *p *q返回下子坐標(biāo) */int i,j,k,max=0,I,J; /* I J為下點(diǎn)坐標(biāo) */for(j=0;j<15;j+)for(i=0;i<15;i+)if(qipanji=SPA) /* 歷遍棋盤,遇到空點(diǎn)則計(jì)算價(jià)值,取最大價(jià)值點(diǎn)下子。 */k=value(i,j);if(k>=ma
22、x) I=i; J=j; max=k; *p=I; *q=J;int value(int p,int q) /* 計(jì)算空點(diǎn)p q的價(jià)值 以k返回 */ int n=1,k=0,k1,k2,K1,K2,X1,Y1,Z1,X2,Y2,Z2,temp; int a244=40,400,3000,10000,6,10,600,10000,20,120,200,0,6,10,500,0,30,300,2500,5000,2,8,300,8000,26,160,0,0,4,20,300,0; /* 數(shù)組a中儲(chǔ)存己方和對方共32種棋型的值 己方0對方1 活0沖1空活2空沖3 子數(shù)0-3(0表示1個(gè)子,3表示
23、4個(gè)子) */while(n!=5)k1=qixing(n,p,q); n+=4;/* k1,k2為2個(gè)反方向的棋型編號(hào) */k2=qixing(n,p,q); n-=3;if(k1>k2) temp=k1; k1=k2; k2=temp; /* 使編號(hào)小的為k1,大的為k2 */K1=k1; K2=k2; /* K1 K2儲(chǔ)存k1 k2的編號(hào) */Z1=k1%10; Z2=k2%10; k1/=10; k2/=10; Y1=k1%10; Y2=k2%10; k1/=10; k2/=10; X1=k1%10; X2=k2%10; /* X Y Z分別表示 己方0對方1 活0沖1空活2空沖
24、3 子數(shù)0-3(0表示1個(gè)子,3表示4個(gè)子) */if(K1=-1) if(K2<0) k+=0; continue; else k+=aX2Y2Z2+5; continue; ; /* 空棋型and其他 */if(K1=-2) if(K2<0) k+=0; continue; else k+=aX2Y2Z2/2; continue; ; /* 邊界沖棋型and其他 */ if(K1=-3) if(K2<0) k+=0; continue; else k+=aX2Y2Z2/3; continue; ; /* 邊界空沖棋型and其他 */ if(K1>-1&&am
25、p;K1<4)&&(K2>-1&&K2<4)|(K2>9&&K2<14)|(K1>99&&K1<104)&&(K2>99&&K2<104)|(K2>109&&K2<114)/* 己活己活 己活己沖 對活對活 對活對沖 的棋型賦值*/if(Z1+Z2>=2) k+=aX2Y23; continue; else k+=aX2Y2Z1+Z2+1; continue; if(K1>9&&K1<
26、14)&&(K2>9&&K2<14)|(K1>109&&K1<114)&&(K2>109&&K2<114)/* 己沖己沖 對沖對沖 的棋型賦值*/if(Z1+Z2>=2) k+=10000; continue; else k+=0; continue; if(K1>-1&&K1<4)&&(K2>99&&K2<104)|(K2>109&&K2<114)|(K1>9&
27、;&K1<14)&&(K2>99&&K2<104)|(K2>109&&K2<114)/* 己活對活 己活對沖 己沖對活 己沖對沖 的棋型賦值*/if(Z1=3|Z2=3) k+=10000; continue; else k+=aX2Y2Z2+aX1Y1Z1/4; continue; else k+=aX1Y1Z1+aX2Y2Z2; continue; /* 其他棋型的賦值 */return k;int qixing(int n,int p,int q) /* 返回空點(diǎn)p q在n方向上的棋型號(hào) n為1-8方向
28、 從右順時(shí)針開始數(shù) */ int k,m=0; /* 棋型號(hào)注解: 己活000-003 己沖010-013 對活100-103 對沖110-113 己空活020-023 己空沖030-033 對空活120-123 對空沖130-133 空-1 邊界沖-2 邊界空沖-3*/yiwei(n,&p,&q);if(p<0|p>14|q<0|q>14) k=-2; /* 邊界沖棋型 */switch(qipanqp)case COM:m+; yiwei(n,&p,&q);if(p<0|p>14|q<0|q>14) k=m+9
29、; return k; while(qipanqp=COM) m+; yiwei(n,&p,&q); if(p<0|p>14|q<0|q>14) k=m+9; return k; if(qipanqp=SPA) k=m-1; /* 己方活棋型 */ else k=m+9; /* 己方?jīng)_棋型 */ break;case MAN:m+; yiwei(n,&p,&q);if(p<0|p>14|q<0|q>14) k=m+109; return k; while(qipanqp=MAN) m+; yiwei(n,&p,&q); if(p<0|p>14|q<0|q>14) k=m+109; return k; if(qipanqp=SPA) k=m+99; /* 對方活棋型 */
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漳州衛(wèi)生職業(yè)學(xué)院《中外建筑鑒賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 西北師范大學(xué)《機(jī)器人技術(shù)雙語》2023-2024學(xué)年第二學(xué)期期末試卷
- 溫州理工學(xué)院《大數(shù)據(jù)應(yīng)用開發(fā)語言》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西電力職業(yè)技術(shù)學(xué)院《施工企業(yè)會(huì)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南工商職業(yè)學(xué)院《管理會(huì)計(jì)模擬實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州百年職業(yè)學(xué)院《計(jì)算機(jī)二維設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安高新科技職業(yè)學(xué)院《實(shí)驗(yàn)室安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島酒店管理職業(yè)技術(shù)學(xué)院《材料與工藝(木材)》2023-2024學(xué)年第二學(xué)期期末試卷
- 綏化學(xué)院《智能控制技術(shù)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津城市建設(shè)管理職業(yè)技術(shù)學(xué)院《小學(xué)教育學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 美發(fā)技能鑒定考試模擬題與參考答案解析
- 2025滬教牛津版七年級(jí)英語下冊全冊培優(yōu)講義
- 水利工程施工文明措施與環(huán)保要求
- 書香校園讀書主題班會(huì) 課件
- 課題申報(bào)書:智能教育視角下基于眼動(dòng)追蹤的在線學(xué)習(xí)認(rèn)知模型及自適應(yīng)機(jī)制研究
- 2022石油化工消防設(shè)施維護(hù)保養(yǎng)技術(shù)標(biāo)準(zhǔn)
- 2025年度考研政治馬克思主義政治經(jīng)濟(jì)學(xué)核心考點(diǎn)復(fù)習(xí)匯編
- (二模)2024~2025學(xué)年度蘇錫常鎮(zhèn)四市高三教學(xué)情況調(diào)研(二)生物試卷(含答案)
- 《康復(fù)技術(shù)》課件-脛腓骨骨折術(shù)后康復(fù)
- “童”心協(xié)力 守護(hù)健康-校園傳染病防控教育
- 域名解析換編碼 課件 2024-2025學(xué)年人教版(2024)初中信息科技七年級(jí)上冊
評(píng)論
0/150
提交評(píng)論