C++實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲
本文實(shí)例為大家分享了C++實(shí)現(xiàn)簡(jiǎn)易五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
//用c++實(shí)現(xiàn)五子棋 #include <iostream> #include <cstdlib> #include "getch.h" using namespace std; enum Role{RED=99,BLUE}; class Gobang { ?? ?char board[15][15]; ?? ?int key_x,key_y; ?? ?Role role; public: ?? ?Gobang(int key_x=7,int key_y=7,Role role=RED):key_x(key_x),key_y(key_y),role(role) {} ?? ?void start(void) ?? ?{ ?? ??? ?for(;;) ?? ??? ?{ ?? ??? ??? ?show_board(); ?? ??? ??? ?get_key(); ?? ??? ??? ?if(check_key()) ?? ??? ??? ?{ ?? ??? ??? ??? ?show_board(); ?? ??? ??? ??? ?printf("%d\n",role); ?? ??? ??? ??? ?cout << "恭喜" << (role==RED?"紅方":"藍(lán)方") << "勝利!" << endl; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?change_role(); ?? ??? ?} ?? ?} ?? ?// 顯示棋盤(pán) ?? ?void show_board(void) ?? ?{ ?? ??? ?system("clear"); ?? ??? ?printf(" ?"); ?? ??? ?for(int i=0; i<15; i++) ?? ??? ?{ ?? ??? ??? ?printf(" %c",'A'+i); ?? ??? ?} ?? ??? ?printf("\n"); ?? ??? ?for(int x=0; x<15; x++) ?? ??? ?{ ?? ??? ??? ?printf("%2d",x+1); ?? ??? ??? ?for(int y=0; y<15; y++) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(RED==board[x][y]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("\33[31m"); ?? ??? ??? ??? ??? ?printf(" @"); ?? ??? ??? ??? ??? ?printf("\33[0m"); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(BLUE == board[x][y]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("\33[34m"); ?? ??? ??? ??? ??? ?printf(" #"); ?? ??? ??? ??? ??? ?printf("\33[0m"); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf(" *"); ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?printf("\n"); ?? ??? ?} ?? ?} ?? ?// 獲取棋子 ?? ?void get_key(void) ?? ?{ ?? ??? ?for(;;) ?? ??? ?{ ?? ??? ??? ?// 設(shè)置光標(biāo)的位置 ?? ??? ??? ?printf("\33[%d;%dH",key_x+2,(key_y+2)*2); ?? ??? ??? ?switch(getch()) ?? ??? ??? ?{ ?? ??? ??? ??? ?case 183: key_x>0 && key_x--; break; ?? ??? ??? ??? ?case 184: key_x<15 && key_x++; break; ?? ??? ??? ??? ?case 185: key_y<15 && key_y++; break; ?? ??? ??? ??? ?case 186: key_y>0 && key_y--; break; ?? ??? ??? ??? ?case 10:if(RED!=board[key_x][key_y] && BLUE!=board[key_x][key_y]) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?board[key_x][key_y] = role; ?? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?size_t count_key(int off_x,int off_y) ?? ?{ ?? ??? ?size_t count = 0; ?? ??? ?for(int x=key_x+off_x,y=key_y+off_y;? ?? ??? ??? ?x>=0 && x<15 && y>=0 && y<15 && board[x][y] == board[key_x][key_y]; x+=off_x,y+=off_y) ?? ??? ?{ ?? ??? ??? ?count++; ?? ??? ?} ?? ??? ?return count; ?? ?} ?? ?// 檢查是否有5子產(chǎn)生 ?? ?bool check_key(void) ?? ?{ ?? ??? ?if(4 <= count_key(0,-1)+count_key(0,1)) return true; ?? ??? ?if(4 <= count_key(-1,0)+count_key(1,0)) return true; ?? ??? ?if(4 <= count_key(-1,-1)+count_key(1,1)) return true; ?? ??? ?if(4 <= count_key(-1,1)+count_key(1,-1)) return true; ?? ??? ?return false; ?? ?} ?? ?// 切換角色 ?? ?void change_role(void) ?? ?{ ?? ??? ?role = (RED==role?BLUE:RED); ?? ?} }; int main()? { ?? ?Gobang b; ?? ?b.start(); }
效果圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序
快速排序是一種不穩(wěn)定排序,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)快速排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開(kāi)放接口”的方案
本文從一個(gè)實(shí)例講解了C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開(kāi)放接口”的方案,文章條理清新,內(nèi)容充實(shí),需要的朋友可以參考下2015-07-07C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解
這篇文章將帶大家深入了解C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類(lèi)型,感興趣的可以學(xué)習(xí)一下2022-01-01C++的動(dòng)態(tài)內(nèi)存管理你真的了解嗎
這篇文章主要為大家詳細(xì)介紹了C++的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02QT實(shí)現(xiàn)將兩個(gè)時(shí)間相加的算法[hh:?mm?+?hh:?mm]的示例代碼
本文主要介紹了QT實(shí)現(xiàn)將兩個(gè)時(shí)間相加的算法[hh:?mm?+?hh:?mm]的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)框架SimpleNN的詳細(xì)過(guò)程
本來(lái)自己想到用C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)主要是想強(qiáng)化一下編碼能力并入門(mén)深度學(xué)習(xí),對(duì)C++實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)框架SimpleNN的詳細(xì)過(guò)程感興趣的朋友一起看看吧2021-08-08vscode調(diào)試使用make編譯的項(xiàng)目
VSCode本身是一個(gè)代碼編輯器,自帶的編譯功能比較弱,本文主要介紹了vscode調(diào)試使用make編譯的項(xiàng)目,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10