C++實現(xiàn)簡易的五子棋游戲
更新時間:2022年05月05日 11:37:00 作者:shandy1012
這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易的五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C++實現(xiàn)簡易五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
//用c++實現(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?"紅方":"藍方") << "勝利!" << endl; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?change_role(); ?? ??? ?} ?? ?} ?? ?// 顯示棋盤 ?? ?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(;;) ?? ??? ?{ ?? ??? ??? ?// 設置光標的位置 ?? ??? ??? ?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(); }
效果圖:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實現(xiàn)“隱藏實現(xiàn),開放接口”的方案
本文從一個實例講解了C++實現(xiàn)“隱藏實現(xiàn),開放接口”的方案,文章條理清新,內(nèi)容充實,需要的朋友可以參考下2015-07-07C語言 數(shù)據(jù)結(jié)構(gòu)與算法之字符串詳解
這篇文章將帶大家深入了解C語言數(shù)據(jù)結(jié)構(gòu)與算法中的字符串,文中主要是介紹了字符串的定義、字符串的比較以及一些串的抽象數(shù)據(jù)類型,感興趣的可以學習一下2022-01-01QT實現(xiàn)將兩個時間相加的算法[hh:?mm?+?hh:?mm]的示例代碼
本文主要介紹了QT實現(xiàn)將兩個時間相加的算法[hh:?mm?+?hh:?mm]的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07C++實現(xiàn)神經(jīng)網(wǎng)絡框架SimpleNN的詳細過程
本來自己想到用C++實現(xiàn)神經(jīng)網(wǎng)絡主要是想強化一下編碼能力并入門深度學習,對C++實現(xiàn)神經(jīng)網(wǎng)絡框架SimpleNN的詳細過程感興趣的朋友一起看看吧2021-08-08