版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、jieC+五子棋Ver2.1程序+代碼帶AI、悔棋等【控制臺(tái)版】這是用C+編寫的一個(gè)簡單五子棋游戲,帶AI(電腦)、悔棋等功能。支持單人游戲(與電腦對戰(zhàn))和雙人對戰(zhàn)。使用的C+知識(shí)也很簡單,只需要懂基本的語法,不需要用到API。這個(gè)游戲不是圖形界面的。是DOS版或者說控制臺(tái)版的。游戲的運(yùn)行界面如下: 這其實(shí)是第三版,添加了悔棋,修復(fù)AI電腦的幾個(gè)BUG,以及悔棋的一個(gè)小問題。當(dāng)然了,若是還有什么BUG可以指出,我們的QQ:775904764,有問題也可以找我。代碼如下:/-/ 簡單五子棋(控制臺(tái)版)代碼Ver2.1/ 修復(fù)了AI越界的問題,簡化評分函數(shù),修復(fù)輸贏判斷函數(shù)的BUG。/ AI評分函
2、數(shù)規(guī)則有部分改變,代碼也更加簡練。/ 新增悔棋功能,僅與AI對戰(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="","","","","","",&
3、quot;","","","","" /可供選用的字符,輸出棋盤或者棋子用static int Record1515=0; /記錄棋子static int Score1515=0; /評分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,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,
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)Ch
6、oice=MainMenu(); /調(diào)用主菜單,并把用戶選擇的值儲(chǔ)存在Choice里 switch(Choice) case 1:flag=1;ExWhile=false;break; /把標(biāo)志設(shè)置為1,與AI對戰(zhàn) case 2:flag=2;ExWhile=false;break; /把標(biāo)志設(shè)置為2,雙人對戰(zhàn)case 3:Select=Introduce();ExWhile=Select;Continue=false;break; /游戲說明函數(shù) case 4:Select=Coder();ExWhile=Select;Continue=false;break; /作者介紹函數(shù) case 5
7、:Exit();ExWhile=false;Continue=false;break; /退出游戲函數(shù) default:cin.fail();cin.clear();cin.sync();cout<<"輸出錯(cuò)誤,請重新輸入!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);flag=0;/-清空棋盤或
8、初始化棋盤-/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<<" 感謝您使用:簡單五子棋 Ver2.1 n"cout<<" n"cout<<"游戲制作:落葉
9、化塵 n"cout<<"聯(lián)系Q Q : 775904764 n"cout<<"聯(lián)系郵箱:lxhdjwg n"cout<<"簡單說明:游戲結(jié)束界面,謝謝您的使用! n"cout<<"n"cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n"system("pause>nul 2>nul"); bool FiveChess:Introduce() /游戲介紹system("cls&quo
10、t;);cout<<"n"cout<<" 簡單五子棋 Ver2.1游戲介紹界面 n"cout<<" n"cout<<"單人游戲:玩家和AI(人工智能)對戰(zhàn),AI智商不高。n"cout<<" n"cout<<"雙人游戲: 可以兩個(gè)玩家一起對戰(zhàn),可能不是很方便。n"cout<<" n"cout<<"游戲方法:輸入X Y坐標(biāo)落子,輸入雙-1悔棋。 n&quo
11、t;cout<<" n"cout<<"特別提示:若游戲中想突然退出,按Ctrl+C即可中斷。n"cout<<" n"cout<<"n"cout<<"是否返回?Y-返回 N-退出:"char choice;cin>>choice;if (choice='N'|choice='n')cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n" system("
12、pause>nul 2>nul"); return false;elsereturn true;bool FiveChess:Coder() /作者介紹 system("cls");cout<<"n"cout<<" 簡單五子棋 Ver2.1作者介紹界面 n"cout<<" n"cout<<"游戲制作:落葉化塵 n"cout<<"聯(lián)系Q Q : 775904764 n"cout<<&q
13、uot;聯(lián)系郵箱:lxhdjwg n"cout<<"簡單介紹:游戲制作簡陋,還請見諒_! n" cout<<"附加說明:作者正在努力學(xué)習(xí)C+中,嘿嘿 n" cout<<"n"cout<<"是否返回?Y-返回 N-退出:"char choice;cin>>choice;if (choice='N'|choice='n')cout<<"感謝您的使用,謝謝!按任意鍵退出游戲.n" syst
14、em("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"); /設(shè)置窗口大小cout<<&quo
15、t;n"cout<<" 簡單五子棋 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"cout<<"5、
16、退出 n"cout<<"n"cout<<"請選擇:"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"); cout<<"n"
17、 cout<<" 恭喜玩家1黑棋獲得勝利! n"cout<<" n"cout<<"勝利玩家:玩家1 n"cout<<"所屬棋子: 黑色 n"cout<<"祝福話語:不錯(cuò)哦_!恭喜您獲得了勝利! n"cout<<" n"cout<<"n"else if (Num=2)system("color 2f");cout<<"n"c
18、out<<" 恭喜玩家2白棋獲得勝利! n"cout<<" n"cout<<"勝利玩家:玩家2 n"cout<<"所屬棋子: 白色 n"cout<<"祝福話語:恭喜您獲得了勝利,再接再厲哈_! n"cout<<" n"cout<<"n"else if(Num=3)system("color 3f");cout<<"n"co
19、ut<<" 恭喜您,獲得了勝利 n"cout<<" n"cout<<"勝利玩家:自己 n"cout<<"所屬棋子: 黑色 n"cout<<"祝福話語:不錯(cuò)哦,打敗了AI,恭喜! n"cout<<" n"cout<<"n"else if(Num=4)system("color 5f");cout<<"n"cout<&l
20、t;" 非常遺憾,您輸了! n"cout<<" n"cout<<"勝利玩家:AI(電腦) n"cout<<"所屬棋子: 白色 n"cout<<"祝福話語:加油吧,下次一定要把AI打敗哦! n"cout<<" n"cout<<"n"elsesystem("color 5f");cout<<"n"cout<<" 勢均
21、力敵平局 n"cout<<" n"cout<<"勝利玩家:無平局 n"cout<<"所屬棋子: 黑色或白色 n"cout<<"祝福話語:棋盤居然被走滿了,不錯(cuò)不錯(cuò)! n"cout<<" n"cout<<"n"cout<<"是否返回主界面?Y-返回 N-退出:"char choice;cin>>choice;if (choice='N'|
22、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)&&(y1=-1)&&(x2=-1)&&a
23、mp;(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=14)valuex1y1=2;Recordx1y1=0;else i
24、f (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=0&&(y1>0&&y1&l
25、t;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)valuex2y2=6;Recordx2y2=0;else if (
26、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;Recordx2y2=0;else if (y2=0&&(x2&
27、gt;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>=15) cin.clear(); cin.sync();
28、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ì)棋盤上面黑子的個(gè)數(shù)else if (valueij=9)player2+; /
29、統(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 (i=-1;i<=1;i+)for (j=-1;j<=1;j+)
30、 /循環(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)有棋子 else break; /沒有棋子就跳出for (k=-1;k>-5;k-)
31、/與上面相對的方向的判斷 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=0; /清空統(tǒng)計(jì) for (i=0;i<15;i+) /棋盤是否滿了for(j
32、=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*y=9; /黑棋e(cuò)lse if (player=2) value*x*y=10; /白棋co
33、ut<<" 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" /-雙人對戰(zhàn)-/void FiveChess:Double(int value15) cout<<"您選擇了雙人對戰(zhàn)
34、模式,請按任意鍵繼續(xù)!"system("pause>nul 2>nul"); system("cls");system ("mode con cols=43 lines=20"); system("color 3f");system("title 五子棋-雙人對戰(zhàn)模式");PrintBord(&x,&y,value,-1); /先繪制個(gè)空棋盤ExWhile=true; /退出循環(huán)用的memset(Record,0,sizeof(Record); /先把記錄落
35、子的數(shù)組清0while(ExWhile)int play=NextPlayer(value); /先得到該哪個(gè)玩家走棋了cout<<"請(玩家"<<play<<")輸入坐標(biāo)用空格隔開:"cin>>x>>y;Check=Position(&x,&y,value); /檢測坐標(biāo)合法性if (Check=0) /坐標(biāo)沒問題 PrintBord(&x,&y,value,play); /再繪制落子棋盤Recordxy=play; /記錄這個(gè)點(diǎn),1表示黑子,2表示白子cout
36、<<"玩家"<<play<<"的棋子落在了:X:"<<x<<" Y:"<<y<<"n"Check1=Win(&x,&y,play,Record); /檢測是否有一方勝利或者和棋 if (Check1=-1) /和棋 cout<<"游戲棋盤滿啦,還沒分出勝負(fù),都很厲害哈!n"cout<<"本次游戲結(jié)束,按任意鍵繼續(xù)." system("pause
37、>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); /跳轉(zhuǎn)勝利界面ExWhile=false; else /沒誰勝利ExWhile=true; /不退出
38、循環(huán)else if(Check=1)cout<<"輸入范圍錯(cuò)誤,請重新輸入!n"ExWhile=true;elsecout<<"您輸入的坐標(biāo)已經(jīng)存在棋子,請重新輸入!n"ExWhile=true;/-與AI對戰(zhàn)-/void FiveChess:Single(int value15) cout<<"您選擇了與AI對戰(zhàn)的模式,請按任意鍵繼續(xù)!"system("pause>nul 2>nul"); system("cls");system ("
39、mode con cols=43 lines=20"); system("color 3f");system("title 五子棋-與AI的對戰(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;cout<<"
40、請玩家輸入坐標(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),1表示黑子,2表示白子x1=x;y1=y; /記錄當(dāng)前坐標(biāo)悔棋用Sum+;if (Win(&x,&
41、amp;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<<"n"/cout<<"玩家坐標(biāo):"<<x1&
42、lt;<" "<<y1<<"電腦坐標(biāo):"<<x2<<" "<<y2<<endl;if (Win(&x,&y,2,Record)=1)cout<<"非常遺憾,您輸了,AI獲得了勝利!n"cout<<"本次游戲結(jié)束,按任意鍵繼續(xù)."system("pause>nul 2>nul");Victory(4); /跳轉(zhuǎn)勝利界面ExWhile=false;else if(Win(&x,&y,2,Record)=
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2178-2024伏秒發(fā)生器校準(zhǔn)規(guī)范
- 2024年度云南省高校教師資格證之高等教育心理學(xué)考前練習(xí)題及答案
- 第6單元 百分?jǐn)?shù)(一)單元測試(含答案)2024-2025學(xué)年六年級上冊數(shù)學(xué)人教版
- 數(shù)據(jù)中心技術(shù)發(fā)展趨勢
- 贛南師范大學(xué)《數(shù)值計(jì)算方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南師范大學(xué)《國際結(jié)算》2023-2024學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《中國文學(xué)批評史》2021-2022學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《健美操》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年二級建造師管理-考題預(yù)測
- 福建師范大學(xué)《文化產(chǎn)業(yè)概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 反強(qiáng)迫勞動(dòng)反歧視反騷擾培訓(xùn)演示文稿課件
- 130t/h燃煤注汽鍋爐安裝技術(shù)交底課件
- 人員定位礦用井口唯一性檢測系統(tǒng)
- 主題班會(huì):拍賣會(huì)ppt課件
- 技能大師工作室建設(shè)PPT幻燈片課件(PPT 66頁)
- 新版新幼兒園成長檔案模板
- JIS G3507-1-2021 冷鐓用碳素鋼.第1部分:線材
- 封裝工藝介紹優(yōu)秀課件
- 建設(shè)工程竣工消防驗(yàn)收記錄表(DOC36頁)
- 學(xué)生學(xué)習(xí)過程評價(jià)量表
- 高中數(shù)學(xué)必修2立體幾何教材分析和教學(xué)建議
評論
0/150
提交評論