C++五子棋編寫(控制臺(tái)版_命令框版)【簡(jiǎn)單五子棋游戲,適合初學(xué)者學(xué)習(xí),代碼有詳細(xì)注釋】.docx_第1頁(yè)
C++五子棋編寫(控制臺(tái)版_命令框版)【簡(jiǎn)單五子棋游戲,適合初學(xué)者學(xué)習(xí),代碼有詳細(xì)注釋】.docx_第2頁(yè)
C++五子棋編寫(控制臺(tái)版_命令框版)【簡(jiǎn)單五子棋游戲,適合初學(xué)者學(xué)習(xí),代碼有詳細(xì)注釋】.docx_第3頁(yè)
C++五子棋編寫(控制臺(tái)版_命令框版)【簡(jiǎn)單五子棋游戲,適合初學(xué)者學(xué)習(xí),代碼有詳細(xì)注釋】.docx_第4頁(yè)
C++五子棋編寫(控制臺(tái)版_命令框版)【簡(jiǎn)單五子棋游戲,適合初學(xué)者學(xué)習(xí),代碼有詳細(xì)注釋】.docx_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C+五子棋Ver2.1程序+代碼帶AI、悔棋等【控制臺(tái)版】這是用C+編寫的一個(gè)簡(jiǎn)單五子棋游戲,帶AI(電腦)、悔棋等功能。支持單人游戲(與電腦對(duì)戰(zhàn))和雙人對(duì)戰(zhàn)。使用的C+知識(shí)也很簡(jiǎn)單,只需要懂基本的語(yǔ)法,不需要用到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。/ AI評(píng)分函數(shù)規(guī)則有部分改變,代碼也更加簡(jiǎn)練。/ 新增悔棋功能,僅與AI對(duì)戰(zhàn)時(shí)可用,新增重新開始功能。/ 修復(fù)悔棋的一個(gè)小BUG,修復(fù)AI隨機(jī)落子部分的定義錯(cuò)誤。/ 作者:落葉化塵 QQ:775904764/-/#include 五子棋類.h#include #include using namespace std; static const char ch114=,; /可供選用的字符,輸出棋盤或者棋子用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, 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,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(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; /作者介紹函數(shù) case 5:Exit();ExWhile=false;Continue=false;break; /退出游戲函數(shù) default:cin.fail();cin.clear();cin.sync();coutnul 2nul);ExWhile=true;break; /其它 if (flag=1) /如果標(biāo)志等于1,說明為單人游戲Single(value); else if (flag=2) /如果標(biāo)志等于2,說明為雙人游戲Double(value);flag=0;/-清空棋盤或初始化棋盤-/void FiveChess:Empty(int value15,int Default15) /清空棋盤for (int i=0;i15;i+) for (int j=0;j15;j+) valueij=Defaultij;void FiveChess:Exit() /退出游戲system(cls);coutn;cout 感謝您使用:簡(jiǎn)單五子棋 Ver2.1 n;cout n;cout游戲制作:落葉化塵 n;cout聯(lián)系Q Q : 775904764 n;cout聯(lián)系郵箱: n;cout簡(jiǎn)單說明:游戲結(jié)束界面,謝謝您的使用! n;coutn;coutnul 2nul); bool FiveChess:Introduce() /游戲介紹system(cls);coutn;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坐標(biāo)落子,輸入雙-1悔棋。 n;cout n;cout特別提示:若游戲中想突然退出,按Ctrl+C即可中斷。n;cout n;coutn;coutchoice;if (choice=N|choice=n)coutnul 2nul); return false;elsereturn true;bool FiveChess:Coder() /作者介紹 system(cls);coutn;cout 簡(jiǎn)單五子棋 Ver2.1作者介紹界面 n;cout n;cout游戲制作:落葉化塵 n;cout聯(lián)系Q Q : 775904764 n;cout聯(lián)系郵箱: n;cout簡(jiǎn)單介紹:游戲制作簡(jiǎn)陋,還請(qǐng)見諒_! n; cout附加說明:作者正在努力學(xué)習(xí)C+中,嘿嘿 n; coutn;coutchoice;if (choice=N|choice=n)coutnul 2nul); 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); /設(shè)置窗口大小coutn;cout 簡(jiǎn)單五子棋 Ver2.1 n;cout1、單人游戲 n;cout n;cout2、雙人游戲 n;cout n;cout3、游戲介紹 n;cout n;cout4、關(guān)于作者 n;cout n;cout5、退出 n;coutn;coutselect; return select; /返回用戶選擇的值/-勝利界面-/void FiveChess:Victory(int Num)system (mode con cols=56 lines=20); /設(shè)置窗口大小system(cls);if (Num=1)system(color 1f); coutn; cout 恭喜玩家1黑棋獲得勝利! n;cout n;cout勝利玩家:玩家1 n;cout所屬棋子: 黑色 n;cout祝福話語(yǔ):不錯(cuò)哦_!恭喜您獲得了勝利! n;cout n;coutn;else if (Num=2)system(color 2f);coutn;cout 恭喜玩家2白棋獲得勝利! n;cout n;cout勝利玩家:玩家2 n;cout所屬棋子: 白色 n;cout祝福話語(yǔ):恭喜您獲得了勝利,再接再厲哈_! n;cout n;coutn;else if(Num=3)system(color 3f);coutn;cout 恭喜您,獲得了勝利 n;cout n;cout勝利玩家:自己 n;cout所屬棋子: 黑色 n;cout祝福話語(yǔ):不錯(cuò)哦,打敗了AI,恭喜! n;cout n;coutn;else if(Num=4)system(color 5f);coutn;cout 非常遺憾,您輸了! n;cout n;cout勝利玩家:AI(電腦) n;cout所屬棋子: 白色 n;cout祝福話語(yǔ):加油吧,下次一定要把AI打敗哦! n;cout n;coutn;elsesystem(color 5f);coutn;cout 勢(shì)均力敵平局 n;cout n;cout勝利玩家:無(wú)平局 n;cout所屬棋子: 黑色或白色 n;cout祝福話語(yǔ):棋盤居然被走滿了,不錯(cuò)不錯(cuò)! n;cout n;coutn;coutchoice;if (choice=N|choice=n)coutnul 2nul); Continue=false;elseContinue=true;/-悔棋-/void FiveChess:Retract(int &x1,int &y1,int &x2,int &y2,int value15)if (Sum=1) Sum-;if (x1=-1)&(y1=-1)&(x2=-1)&(y2=-1)coutnul);else if (Renum=6)coutnul);else Renum+;if (x1=0&y1=0)valuex1y1=0;Recordx1y1=0;else if (x1=0&y1=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&(y10&y10&x10&y10&x10&y20&x20&y20&x214)valuex2y2=3;Recordx2y2=0;else valuex2y2=4;Recordx2y2=0;coutnul);/-判斷用戶輸入的坐標(biāo)合法性-/int FiveChess:Position(int *x,int *y,int value15) if (cin.fail()|*x=15|*y=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;i15;i+)for (j=0;jplayer2|player1player2) 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:沒有誰(shuí)勝利 返回1:傳遞過來(lái)ChessNum號(hào)的那一方勝利 int number=0;Sumchess=0; for (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=0 &*x+k*i=0 &*y+k*j-5;k-) /與上面相對(duì)的方向的判斷 if(*x+k*i=0 &*x+k*i=0 &*y+k*j=4) /如果=4就說明5連了,返回ChessNum表示傳遞過來(lái)的這個(gè)玩家得下子點(diǎn)能構(gòu)成5個(gè),勝利了 return 1; else number=0; /清空統(tǒng)計(jì) for (i=0;i15;i+) /棋盤是否滿了for(j=0;j=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*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;i15;i+) if(i!=0) cout i%10; elsecout 0;for (j=0;j15;j+) coutchvalueij; coutn; /-雙人對(duì)戰(zhàn)-/void FiveChess:Double(int value15) coutnul 2nul); 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; /退出循環(huán)用的memset(Record,0,sizeof(Record); /先把記錄落子的數(shù)組清0while(ExWhile)int play=NextPlayer(value); /先得到該哪個(gè)玩家走棋了cout請(qǐng)(玩家playxy;Check=Position(&x,&y,value); /檢測(cè)坐標(biāo)合法性if (Check=0) /坐標(biāo)沒問題 PrintBord(&x,&y,value,play); /再繪制落子棋盤Recordxy=play; /記錄這個(gè)點(diǎn),1表示黑子,2表示白子cout玩家play的棋子落在了:X:x Y:yn;Check1=Win(&x,&y,play,Record); /檢測(cè)是否有一方勝利或者和棋 if (Check1=-1) /和棋 cout游戲棋盤滿啦,還沒分出勝負(fù),都很厲害哈!n;coutnul 2nul); Victory(5); /跳轉(zhuǎn)勝利界面ExWhile=false; else if(Check1=1) /當(dāng)前玩家paly勝利cout恭喜玩家play獲得勝利!n;coutnul 2nul);Victory(play); /跳轉(zhuǎn)勝利界面ExWhile=false; else /沒誰(shuí)勝利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) coutnul 2nul); 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,y2=-1;while(ExWhile) ExWhile1=true;coutxy;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),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:yn;/cout玩家坐標(biāo):x1 y1電腦坐標(biāo):x2 y2endl;if (Win(&x,&y,2,Record)=1)cout非常遺憾,您輸了,AI獲得了勝利!n;coutnul 2nul);Victory(4); /跳轉(zhuǎn)勝利界面ExWhile=false;else if(Win(&x,&y,2,Record)=-1)cout游戲棋盤滿啦,還沒分出勝負(fù),都很厲害哈!n;coutnul 2nul);Victory(5); /跳轉(zhuǎn)平局界面ExWhile=false;else ExWhile=true;else if(Win(&x,&y,1,Record)=1)PrintBord(&x,&y,value,-1); /繪制棋盤cout恭喜玩家獲得勝利!n; coutnul 2nul);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論