




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+五子棋Ver2.1程序+代碼帶AI、悔棋等【控制臺(tái)版】這是用C+編寫的一個(gè)簡(jiǎn)單五子棋游戲,帶AI(電腦)、悔棋等功能。支持單人游戲(與電腦對(duì)戰(zhàn))和雙人對(duì)戰(zhàn)。使用的C+知識(shí)也很簡(jiǎn)單,只需要懂基本的語法,不需要用到API。這個(gè)游戲不是圖形界面的。是DOS版或者說控制臺(tái)版的。游戲的運(yùn)行界面如下:推薦精選推薦精選 這其實(shí)是第三版,添加了悔棋,修復(fù)AI電腦的幾個(gè)BUG,以及悔棋的一個(gè)小問題。當(dāng)然了,若是還有什么BUG可以指出,我們的QQ:775904764,有問題也可以找我。代碼如下:/-/ 簡(jiǎn)單五子棋(控制臺(tái)版)代碼Ver2.1/ 修復(fù)了AI越界的問題,簡(jiǎn)化評(píng)分函數(shù),修復(fù)輸贏判斷函數(shù)的BUG。/
2、AI評(píng)分函數(shù)規(guī)則有部分改變,代碼也更加簡(jiǎn)練。/ 新增悔棋功能,僅與AI對(duì)戰(zhàn)時(shí)可用,新增重新開始功能。/ 修復(fù)悔棋的一個(gè)小BUG,修復(fù)AI隨機(jī)落子部分的定義錯(cuò)誤。/ 作者:落葉化塵 QQ:775904764/-/#include "五子棋類.h"#include <time.h> #include <iostream>using namespace std; static const char ch114="","","","","","&qu
3、ot;,"","","","","" /可供選用的字符,輸出棋盤或者棋子用static int Record1515=0; /記錄棋子static int Score1515=0; /評(píng)分static int Sum=0,Renum=0; int main() 推薦精選 int Default1515= 0,1,1,1,1,1,1,1,1,1,1,1,1,1,2, /空棋盤 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
4、 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,
5、4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 6,7,7,7,7,7,7,7,7,7,7,7,7,7,8 ;int value1515=0; FiveChess Start;do Start.StartGame(value,Default); /開始游戲while (Start.Continue); /若是要退出就修改這個(gè)值return 0; /-開始游戲-/void FiveChess:StartGame(int value15,int Default15)Empty(value,Default); /初始化棋盤adExWhile=true;while(
6、ExWhile)Choice=MainMenu(); /調(diào)用主菜單,并把用戶選擇的值儲(chǔ)存在Choice里 switch(Choice) case 1:flag=1;ExWhile=false;break; /把標(biāo)志設(shè)置為1,與AI對(duì)戰(zhàn) case 2:flag=2;ExWhile=false;break; /把標(biāo)志設(shè)置為2,雙人對(duì)戰(zhàn)case 3:Select=Introduce();ExWhile=Select;Continue=false;break; /游戲說明函數(shù) case 4:Select=Coder();ExWhile=Select;Continue=false;break; /作者介
7、紹函數(shù) case 5:Exit();ExWhile=false;Continue=false;break; /退出游戲函數(shù) default:cin.fail();cin.clear();cin.sync();cout<<"輸出錯(cuò)誤,請(qǐng)重新輸入!推薦精選n"system("pause>nul 2>nul");ExWhile=true;break; /其它 if (flag=1) /如果標(biāo)志等于1,說明為單人游戲Single(value); else if (flag=2) /如果標(biāo)志等于2,說明為雙人游戲Double(value);
8、flag=0;/-清空棋盤或初始化棋盤-/void FiveChess:Empty(int value15,int Default15) /清空棋盤for (int i=0;i<15;i+) for (int j=0;j<15;j+) valueij=Defaultij;void FiveChess:Exit() /退出游戲system("cls");cout<<"n"cout<<" 感謝您使用:簡(jiǎn)單五子棋 Ver2.1 n"cout<<" n"cout<<
9、;"游戲制作:落葉化塵 n"cout<<"聯(lián)系Q Q : 775904764 n"cout<<"聯(lián)系郵箱:lxhdjwg n"cout<<"簡(jiǎn)單說明:游戲結(jié)束界面,謝謝您的使用! n"cout<<"n"cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n"system("pause>nul 2>nul"); bool FiveChess:Introduce() /游戲介紹system
10、("cls");cout<<"n"cout<<" 簡(jiǎn)單五子棋 Ver2.1游戲介紹界面 n"cout<<" n"推薦精選cout<<"單人游戲:玩家和AI(人工智能)對(duì)戰(zhàn),AI智商不高。n"cout<<" n"cout<<"雙人游戲: 可以兩個(gè)玩家一起對(duì)戰(zhàn),可能不是很方便。n"cout<<" n"cout<<"游戲方法:輸入X Y坐
11、標(biāo)落子,輸入雙-1悔棋。 n"cout<<" n"cout<<"特別提示:若游戲中想突然退出,按Ctrl+C即可中斷。n"cout<<" n"cout<<"n"cout<<"是否返回?Y-返回 N-退出:"char choice;cin>>choice;if (choice='N'|choice='n')cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n&q
12、uot; system("pause>nul 2>nul"); return false;elsereturn true;bool FiveChess:Coder() /作者介紹 system("cls");cout<<"n"cout<<" 簡(jiǎn)單五子棋 Ver2.1作者介紹界面 n"cout<<" n"cout<<"游戲制作:落葉化塵 n"cout<<"聯(lián)系Q Q : 775904764 n&q
13、uot;cout<<"聯(lián)系郵箱:lxhdjwg n"cout<<"簡(jiǎn)單介紹:游戲制作簡(jiǎn)陋,還請(qǐng)見諒_! n" cout<<"附加說明:作者正在努力學(xué)習(xí)C+中,嘿嘿 n" cout<<"n"cout<<"是否返回?Y-返回 N-退出:"char choice;cin>>choice;if (choice='N'|choice='n')cout<<"感謝您的使用,謝謝!按任意
14、鍵退出游戲.n" system("pause>nul 2>nul"); return false; 推薦精選elsereturn true;/-選擇主菜單-/int FiveChess:MainMenu() system("cls"); /清屏system("title 五子棋游戲 By-落葉化塵 QQ:775904764"); /修改窗口標(biāo)題system("color 3f"); /定義窗口顏色system ("mode con cols=56 lines=20"); /
15、設(shè)置窗口大小cout<<"n"cout<<" 簡(jiǎn)單五子棋 Ver2.1 n"cout<<"1、單人游戲 n"cout<<" n"cout<<"2、雙人游戲 n"cout<<" n"cout<<"3、游戲介紹 n"cout<<" n"cout<<"4、關(guān)于作者 n"cout<<" n&quo
16、t;cout<<"5、退出 n"cout<<"n"cout<<"請(qǐng)選擇:"int select;cin>>select; return select; /返回用戶選擇的值/-勝利界面-/void FiveChess:Victory(int Num)system ("mode con cols=56 lines=20"); /設(shè)置窗口大小system("cls");if (Num=1)system("color 1f"); cou
17、t<<"n" cout<<" 恭喜玩家1黑棋獲得勝利! n"cout<<" n"cout<<"勝利玩家:玩家1 n"cout<<"所屬棋子: 黑色 n"推薦精選cout<<"祝福話語:不錯(cuò)哦_!恭喜您獲得了勝利! n"cout<<" n"cout<<"n"else if (Num=2)system("color 2f");
18、cout<<"n"cout<<" 恭喜玩家2白棋獲得勝利! n"cout<<" n"cout<<"勝利玩家:玩家2 n"cout<<"所屬棋子: 白色 n"cout<<"祝福話語:恭喜您獲得了勝利,再接再厲哈_! n"cout<<" n"cout<<"n"else if(Num=3)system("color 3f");c
19、out<<"n"cout<<" 恭喜您,獲得了勝利 n"cout<<" n"cout<<"勝利玩家:自己 n"cout<<"所屬棋子: 黑色 n"cout<<"祝福話語:不錯(cuò)哦,打敗了AI,恭喜! n"cout<<" n"cout<<"n"else if(Num=4)system("color 5f");cout<&
20、lt;"n"cout<<" 非常遺憾,您輸了! n"cout<<" n"cout<<"勝利玩家:AI(電腦) n"cout<<"所屬棋子: 白色 n"cout<<"祝福話語:加油吧,下次一定要把AI打敗哦! n"cout<<" n"cout<<"n"elsesystem("color 5f");cout<<"n&
21、quot;推薦精選cout<<" 勢(shì)均力敵平局 n"cout<<" n"cout<<"勝利玩家:無平局 n"cout<<"所屬棋子: 黑色或白色 n"cout<<"祝福話語:棋盤居然被走滿了,不錯(cuò)不錯(cuò)! n"cout<<" n"cout<<"n"cout<<"是否返回主界面?Y-返回 N-退出:"char choice;cin>>
22、choice;if (choice='N'|choice='n')cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n" system("pause>nul 2>nul"); Continue=false;elseContinue=true;/-悔棋-/void FiveChess:Retract(int &x1,int &y1,int &x2,int &y2,int value15)if (Sum>=1) Sum-;if (x1=-1)&&(
23、y1=-1)&&(x2=-1)&&(y2=-1)cout<<"當(dāng)前無法悔棋,棋盤上沒有棋子!"system("pause>nul");else if (Renum>=6)cout<<"悔棋超過6次,為了公平,您不能再次悔棋!"system("pause>nul");else Renum+;if (x1=0&&y1=0)valuex1y1=0;Recordx1y1=0;推薦精選else if (x1=0&&y1=
24、14)valuex1y1=2;Recordx1y1=0;else if (x1=14&&y1=0)valuex1y1=6;Recordx1y1=0;else if (x1=14&&y1=14)valuex1y1=8;Recordx1y1=0;else if (x1=14&&(y1>0&&y1<14)valuex1y1=7;Recordx1y1=0;else if (y1=14&&(x1>0&&x1<14)valuex1y1=5;Recordx1y1=0;else if (x1
25、=0&&(y1>0&&y1<14)valuex1y1=1;Recordx1y1=0;else if (y1=0&&(x1>0&&x1<14)valuex1y1=3;Recordx1y1=0;else valuex1y1=4;Recordx1y1=0;if (x2=0&&y2=0)valuex2y2=0;Recordx2y2=0;else if (x2=0&&y2=14)valuex2y2=2;Recordx2y2=0;else if (x2=14&&y2=0)
26、valuex2y2=6;Recordx2y2=0;else if (x2=14&&y2=14)valuex2y2=8;Recordx2y2=0;else if (x2=14&&(y2>0&&y2<14)valuex2y2=7;Recordx2y2=0;else if (y2=14&&(x2>0&&x2<14)valuex1y2=5;Recordx2y2=0;else if (x2=0&&(y2>0&&y2<14)valuex2y2=1;Record
27、x2y2=0;else if (y2=0&&(x2>0&&x2<14)valuex2y2=3;Recordx2y2=0;else valuex2y2=4;Recordx2y2=0;cout<<"每盤最多允許悔棋6次,且最多只能回到上一步!"system("pause>nul");/-判斷用戶輸入的坐標(biāo)合法性-/int FiveChess:Position(int *x,int *y,int value15) if (cin.fail()|*x<0|*x>=15|*y<0|*y
28、>=15) cin.clear(); cin.sync(); return 1; /返回1表示不在范圍內(nèi)或者輸入的不是數(shù)字 else if (value*x*y=9|value*x*y=10)return 2; /存在棋子else return 0; /返回 0 表示 坐標(biāo)正常 /-判斷該哪個(gè)玩家先走-/int FiveChess:NextPlayer(int value15) 推薦精選int i,j;int player1=0,player2=0; for (i=0;i<15;i+)for (j=0;j<15;j+)if (valueij=10)player1+; /統(tǒng)計(jì)棋
29、盤上面黑子的個(gè)數(shù)else if (valueij=9)player2+; /統(tǒng)計(jì)棋盤上白子的個(gè)數(shù)if (player1>player2|player1<player2) return 2; /該玩家2走了(白子)else return 1; /該玩家1走了(黑子)/-判斷棋子落在這點(diǎn),是否勝利或者平局-/int FiveChess:Win(int *x,int *y,int ChessNum,int value15) int i,j,k; /返回-1:平局 返回0:沒有誰勝利 返回1:傳遞過來ChessNum號(hào)的那一方勝利 int number=0;Sumchess=0; for
30、(i=-1;i<=1;i+)for (j=-1;j<=1;j+) /循環(huán)8次,分別計(jì)算這個(gè)點(diǎn)的8個(gè)方向是否構(gòu)成5連if (i!=0 | j!=0) /i或者j等于0,不就代表的是ChessNum的值嘛for (k=1;k<5;k+) /循環(huán)4次 /這是不越界判斷 /存在棋子數(shù)目+1 if(*x+k*i>=0 &&*x+k*i<=14 && *y+k*j>=0 &&*y+k*j<=14 && 推薦精選value*x+k*i*y+k*j=ChessNum)number+; /如果這個(gè)點(diǎn)有棋子
31、else break; /沒有棋子就跳出for (k=-1;k>-5;k-) /與上面相對(duì)的方向的判斷 if(*x+k*i>=0 &&*x+k*i<=14 && *y+k*j>=0 &&*y+k*j<=14 && value*x+k*i*y+k*j=ChessNum)number+; else break; /沒有棋子就跳出if(number>=4) /如果>=4就說明5連了,返回ChessNum表示傳遞過來的這個(gè)玩家得下子點(diǎn)能構(gòu)成5個(gè),勝利了 return 1; else number=
32、0; /清空統(tǒng)計(jì) for (i=0;i<15;i+) /棋盤是否滿了for(j=0;j<15;j+)if (valueij=9|valueij=10)Sumchess+; /統(tǒng)計(jì)黑子和白子的總個(gè)數(shù)if (Sumchess>=225) return -1; /棋盤滿了else return 0; /沒勝利也沒和棋/-繪制棋盤、落子函數(shù)-/推薦精選void FiveChess:PrintBord(int *x,int *y,int value15,int player) system("cls"); int i,j;if (player=1) value*x*
33、y=9; /黑棋e(cuò)lse if (player=2) value*x*y=10; /白棋cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4n" /輸出參考坐標(biāo)for (i=0;i<15;i+) if(i!=0) cout<<" "<<i%10; elsecout<<" 0"for (j=0;j<15;j+) cout<<chvalueij; cout<<"n" /-雙人對(duì)戰(zhàn)-/void FiveChess:
34、Double(int value15) cout<<"您選擇了雙人對(duì)戰(zhàn)模式,請(qǐng)按任意鍵繼續(xù)!"system("pause>nul 2>nul"); system("cls");system ("mode con cols=43 lines=20"); system("color 3f");system("title 五子棋-雙人對(duì)戰(zhàn)模式");PrintBord(&x,&y,value,-1); /先繪制個(gè)空棋盤ExWhile=true;
35、 /退出循環(huán)用的memset(Record,0,sizeof(Record); /先把記錄落子的數(shù)組清0while(ExWhile)推薦精選int play=NextPlayer(value); /先得到該哪個(gè)玩家走棋了cout<<"請(qǐng)(玩家"<<play<<")輸入坐標(biāo)用空格隔開:"cin>>x>>y;Check=Position(&x,&y,value); /檢測(cè)坐標(biāo)合法性if (Check=0) /坐標(biāo)沒問題 PrintBord(&x,&y,value,pl
36、ay); /再繪制落子棋盤Recordxy=play; /記錄這個(gè)點(diǎn),1表示黑子,2表示白子cout<<"玩家"<<play<<"的棋子落在了:X:"<<x<<" Y:"<<y<<"n"Check1=Win(&x,&y,play,Record); /檢測(cè)是否有一方勝利或者和棋 if (Check1=-1) /和棋 cout<<"游戲棋盤滿啦,還沒分出勝負(fù),都很厲害哈!n"cout<
37、;<"本次游戲結(jié)束,按任意鍵繼續(xù)." system("pause>nul 2>nul"); Victory(5); /跳轉(zhuǎn)勝利界面ExWhile=false; else if(Check1=1) /當(dāng)前玩家paly勝利cout<<"恭喜玩家"<<play<<"獲得勝利!n"cout<<"本次游戲結(jié)束,按任意鍵繼續(xù)." system("pause>nul 2>nul");Victory(play);
38、/跳轉(zhuǎn)勝利界面ExWhile=false; else /沒誰勝利ExWhile=true; /不退出循環(huán)else if(Check=1)cout<<"輸入范圍錯(cuò)誤,請(qǐng)重新輸入!n"ExWhile=true;elsecout<<"您輸入的坐標(biāo)已經(jīng)存在棋子,請(qǐng)重新輸入!n"ExWhile=true;推薦精選/-與AI對(duì)戰(zhàn)-/void FiveChess:Single(int value15) cout<<"您選擇了與AI對(duì)戰(zhàn)的模式,請(qǐng)按任意鍵繼續(xù)!"system("pause>nul 2
39、>nul"); system("cls");system ("mode con cols=43 lines=20"); system("color 3f");system("title 五子棋-與AI的對(duì)戰(zhàn)模式");PrintBord(&x,&y,value,-1); /先繪制個(gè)空棋盤ExWhile=true; /退出循環(huán)用的Sum=0,Renum=0; memset(Record,0,sizeof(Record); /先把記錄落子的數(shù)組清0int x1=-1,y1=-1,x2=-1
40、,y2=-1;while(ExWhile) ExWhile1=true;cout<<"請(qǐng)玩家輸入坐標(biāo)雙(-1)為悔棋:" cin>>x>>y;Check=Position(&x,&y,value);if (x=-1)&&(y=-1) /悔棋Retract(x1,y1,x2,y2,value);PrintBord(&x,&y,value,-1); /繪制落子棋盤ExWhile=true; else if (Check=0) /坐標(biāo)沒問題 valuexy=9;Recordxy=1; /記錄這個(gè)點(diǎn)
41、,1表示黑子,2表示白子x1=x;y1=y; /記錄當(dāng)前坐標(biāo)悔棋用Sum+;if (Win(&x,&y,1,Record)=0) Robot(&x,&y,&Sum,value); /調(diào)用AI函數(shù)PrintBord(&x,&y,value,2); /繪制落子棋盤x2=x;y2=y; /記錄當(dāng)前坐標(biāo)悔棋用cout<<"玩家棋子數(shù):"<<Sum<<" 電腦的棋子落在了X:"<<x<<" Y:"<<y<<
42、"n"/cout<<"玩家坐標(biāo):"<<x1<<" "<<y1<<"電腦坐標(biāo):"<<x2<<" "<<y2<<endl;if (Win(&x,&y,2,Record)=1)cout<<"非常遺憾,您輸了,AI獲得了勝利!n"推薦精選cout<<"本次游戲結(jié)束,按任意鍵繼續(xù)."system("pause>nul 2>nul"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空物流企業(yè)的戰(zhàn)略規(guī)劃與執(zhí)行考核試卷
- 船舶改裝項(xiàng)目施工過程中的質(zhì)量控制信息化考核試卷
- 現(xiàn)代林業(yè)機(jī)械發(fā)展趨勢(shì)與挑戰(zhàn)考核試卷
- 紅外測(cè)溫儀的制造與優(yōu)化考核試卷
- 玻璃制品表面涂層技術(shù)考核試卷
- 墨水生產(chǎn)過程中的自動(dòng)化設(shè)備操作考核試卷
- 眼鏡制造業(yè)的質(zhì)量控制體系考核試卷
- 租書服務(wù)創(chuàng)新案例考核試卷
- 煤炭加工企業(yè)的效益分析與財(cái)務(wù)評(píng)估考核試卷
- 抖音直播帶貨火花支付傭金結(jié)算服務(wù)協(xié)議
- 2025年高三高考沖刺主題教育班會(huì):《高三考前心理調(diào)適指南:減壓賦能 輕松備考》-2024-2025學(xué)年高中主題班會(huì)課件
- 2025年安全生產(chǎn)考試題庫(消防安全應(yīng)急處置)消防設(shè)施運(yùn)行維護(hù)試題
- 鄂爾多斯市水發(fā)燃?xì)庥邢薰菊衅腹P試真題2024
- 2025年臨海市紀(jì)委市監(jiān)委下屬事業(yè)單位公開選聘工作人員1人筆試備考題庫及答案解析
- 河北省唐山市、廊坊市2025年高三高考第二次模擬演練思想政治試卷(含答案)
- 湖北武漢市華中師大一附中2025屆高三3月押軸試題物理試題試卷含解析
- 司法雇員考試題目及答案
- 國家金融監(jiān)督管理總局所屬事業(yè)單位招聘真題2024
- 小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)進(jìn)位、退位加減法口算
- 2024年全國高中數(shù)學(xué)聯(lián)賽(浙江預(yù)賽)試題含參考答案
- 人教PEP版(2024)三年級(jí)下冊(cè)英語Unit5 Old toys單元整體教學(xué)設(shè)計(jì)(共6課時(shí))
評(píng)論
0/150
提交評(píng)論