亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++實現簡單的掃雷游戲(控制臺版)

2020-01-26 14:37:21
字體:
來源:轉載
供稿:網友

C++新手的代碼,請各位多包涵。

用C++寫的一個簡單的控制臺版掃雷游戲。玩家通過輸入方塊的坐標來翻開方塊。

只是一個雛形,能夠讓玩家執行翻開方塊的操作并且判斷輸贏,還未添加標記方塊、游戲菜單、記錄游戲時間、重新開一局等等的功能。

玩家輸入坐標的方式來翻開方塊只適用于小型的“雷區”,若“雷區”大了,用坐標會變得很不方便。

代碼片段掃雷V1.1

#include<stdio.h>#include<Windows.h> #define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY using namespace std; const int STARTX = 30;const int STARTY = 6;const int MAXX = 9;//雷區的寬const int MAXY = 9;//雷區的高const int BOMBNUMBER = 10;//地雷數量 class Cube{private: bool ifHaveBomb;//該方塊是否含有炸彈 bool ifOpen;//該方塊有無被玩家翻開 int nearBombNumber;//該區塊周圍8格的含有炸彈的方塊的數量public: void setOpen() {  //將Open的值改為true  ifOpen = true; } bool getOpen() {  //獲取ifOpen的值  return ifOpen; } void setNearBombNumber(int number) {  //給nearBombNumber賦值  nearBombNumber = number; } void haveBomb() {  //給方塊放置地雷  ifHaveBomb = true; } bool getIfHaveBomb() {  //獲取ifHaveBomb的值  return ifHaveBomb; } int getNearBombNumber() {  //獲取nearBombNumber的值  return nearBombNumber; } void resetCube(bool ifhavebomb = false, bool ifopen = false, int nearbombnumber = 0){  //初始化成員數據  ifHaveBomb = ifhavebomb;  ifOpen = ifopen;  nearBombNumber = nearbombnumber; }};Cube cube[MAXX][MAXY]; void GoTo(int x, int y);//定位光標void setBomb(int bombNumber);//生成bombNumber個炸彈并且放進隨機的方塊中void show();//顯示地雷陣int checkAndSetNearBombNumber(int x, int y);//檢查當前方塊周圍的雷數量void gameStart();//初始化游戲void showXY();//顯示雷區坐標bool player(bool &life);//玩家輸入坐標翻開方塊void message(bool life);//玩家游戲結束后輸出的信息void autoOpen(int x,int y);//玩家翻開的方塊為不含雷且周圍無雷的方塊時,自動翻開周圍無雷的方塊bool ifWin();//判斷玩家是否掃雷成功void showBomb();//游戲結束后顯示地雷位置 int main() {  gameStart(); show(); bool life = true, win = true; while (player(life) && !ifWin()) { } message(life && ifWin()); return 0;} void GoTo(int x, int y) { //定位光標 COORD coord = { x,y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);} void setBomb(int bombNumber = BOMBNUMBER) { //生成bombNumber個炸彈并且放進隨機的方塊中 srand((unsigned)GetCurrentTime()); while (bombNumber--) {  int x = MAXX + 1, y = MAXY + 1;  while ((x >= MAXX || y >= MAXY) || cube[x][y].getIfHaveBomb() == true) {   x = rand() % MAXX;   y = rand() % MAXY;  }  cube[x][y].haveBomb(); }} void show() { //顯示地雷陣 system("cls"); showXY(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN); for (int i = 0;i < MAXY;i++) {  GoTo(STARTX, STARTY + i);  for (int j = 0;j < MAXX;j++) {   if (cube[j][i].getOpen() == true) {    if (cube[j][i].getIfHaveBomb() == false) {     if (cube[j][i].getNearBombNumber() == 0) { //挖開無雷的方塊顯示該方塊周圍多少個方塊含雷,若為0則顯示空格      printf(" ");     } else {      printf(" %d", cube[j][i].getNearBombNumber());     }    } else {     printf("×");//有雷的方塊被挖開后顯示×    }   } else {    printf("■");//未翻開的方塊用■顯示   }  } }} void showXY() { //顯示坐標軸 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN); GoTo(STARTX - 3, STARTY + MAXY / 2); printf("Y"); GoTo(STARTX + MAXX, STARTY - 2); printf("X"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW); for (int i = 0;i < MAXY;i++) {  GoTo(STARTX - 1, STARTY + i);  printf("%d ", i); } for (int i = 0;i < 2 * MAXX;i += 2) {  GoTo(STARTX + i + 1, STARTY - 1);  printf("%d ", i / 2); }} int checkAndSetNearBombNumber(int x, int y) { //檢查當前方塊周圍的雷數量 int num = 0;   if (cube[x][y].getIfHaveBomb() == true) {  //若該方塊有地雷,則不用判斷它周圍有幾個雷  return 0; } else {  //用兩個循環當前方塊周圍8格掃一遍  for (int i = -1; i <= 1; i++) {   for (int j = -1; j <= 1; j++) {    int nx = x + i;    int ny = y + j;    if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&     (ny >= 0 && ny <= MAXY - 1)) {     if (cube[nx][ny].getIfHaveBomb()) {      num++;     }    }   }  }  cube[x][y].setNearBombNumber(num);//設置該方塊附近的地雷的數量  return 0; }} void gameStart() { //初始化游戲 for (int i = 0;i < MAXY;i++) {  for (int j = 0;j < MAXX;j++) {   cube[j][i].resetCube();  } } setBomb(); for (int i = 0;i < MAXY;i++) {  for (int j = 0;j < MAXX;j++) {   checkAndSetNearBombNumber(j, i);  } }} bool player(bool &life) { //玩家輸入坐標翻開方塊 int x, y; GoTo(STARTX - 3, STARTY + MAXY + 1); printf("請輸入坐標(x,y),x和y用空格隔開"); GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2); scanf("%d%d", &x, &y); if ((x < 0) || (x > MAXX - 1) || (y < 0) || (y > MAXY - 1)) {  //當玩家輸入的坐標超出范圍時  show();  GoTo(STARTX - 3, STARTY + MAXY + 3);  printf("該坐標不存在,請重新輸入坐標");  GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2); } else if (cube[x][y].getIfHaveBomb() == true) {  //當玩家翻開的方塊有地雷時  cube[x][y].setOpen();  show();  life = false;  return false; } else if (cube[x][y].getOpen() == false) {  //當玩家翻開的方塊無雷時  if (cube[x][y].getNearBombNumber() == 0) {   autoOpen(x, y);   cube[x][y].setOpen();   show();  } else {   cube[x][y].setOpen();   show();  } } else if (cube[x][y].getOpen() == true) {  //當玩家輸入已翻開方塊的坐標時  show();  GoTo(STARTX, STARTY + MAXY + 3);  printf("該方塊已被挖開,請再次輸入坐標");  GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2); } ifWin(); return true;} void message(bool result) { if (result == true) {  //玩家勝利時輸出的信息  showBomb();  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);  GoTo(STARTX - 1, STARTY + MAXY + 1);  printf("祝賀你,你勝利了!");  GoTo(STARTX, STARTY + MAXY + 2); } else {  //玩家失敗時輸出的信息  showBomb();  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);  GoTo(STARTX - 1, STARTY + MAXY + 1);  printf("××你踩中地雷了××");  GoTo(STARTX, STARTY + MAXY + 2); }} void autoOpen(int x, int y) { //玩家翻開的方塊為不含雷且周圍無雷的方塊時,自動翻開周圍無雷的方塊 for (int i = -1; i <= 1; i++) {  for (int j = -1; j <= 1; j++) {   int nx = x + i;   int ny = y + j;   if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&    (ny >= 0 && ny <= MAXY - 1) && cube[nx][ny].getOpen() == false) {    if (cube[nx][ny].getNearBombNumber() == 0) {     cube[nx][ny].setOpen();     autoOpen(nx, ny);    } else {     cube[nx][ny].setOpen();    }   }  } }} bool ifWin() { //判斷玩家是否掃雷成功達到游戲結束條件 int num = 0; for (int i = 0;i < MAXX;i++) {  for (int j = 0;j < MAXY;j++) {   if (cube[j][i].getOpen() == false) {    num++;   }  } } if (num == BOMBNUMBER) {  return true; } else {  return false; }} void showBomb() { //游戲結束后顯示地雷位置 for (int i = 0;i < MAXY;i++) {  for (int j = 0;j < MAXX;j++) {   if (cube[j][i].getIfHaveBomb() == true) {    cube[j][i].setOpen();   }  } } show();}

效果圖:

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍中文字幕| 欧美一级大片视频| 91亚洲永久免费精品| 亚洲国产小视频在线观看| 中文字幕亚洲图片| 国产偷亚洲偷欧美偷精品| 欧美黑人极品猛少妇色xxxxx| 亚洲乱码av中文一区二区| 国产z一区二区三区| 欧美wwwwww| 亚洲精选一区二区| 中文字幕日韩欧美在线视频| 亚洲欧美在线看| 精品人伦一区二区三区蜜桃免费| 欧美激情第1页| 欧美日韩国产中文精品字幕自在自线| 久久国产精品影片| 九九视频这里只有精品| 亚洲色图国产精品| 久久精品精品电影网| 日韩欧美中文字幕在线播放| 成人激情av在线| 欧美福利视频在线观看| 欧美日韩在线另类| 国产精品精品一区二区三区午夜版| 欧美性videos高清精品| 清纯唯美亚洲综合| 激情懂色av一区av二区av| 国产精品久久久久久av| 精品国偷自产在线| 久久久久久久一区二区三区| 欧美日韩在线第一页| 成人a在线观看| 国产日韩精品在线观看| 欧美性xxxx极品hd欧美风情| 久久久久久久久久久久av| 久久久久久高潮国产精品视| 亚洲成年网站在线观看| 成人乱人伦精品视频在线观看| 国产精品美腿一区在线看| 国产成人短视频| 一个人看的www久久| 国产精品视频区| 成人免费大片黄在线播放| 日韩福利在线播放| 综合国产在线观看| 亚洲精美色品网站| 国产精品久久久久久久久久东京| 91高潮精品免费porn| 国产精品美女无圣光视频| 亚洲天堂男人天堂女人天堂| 国产97在线观看| 国产不卡一区二区在线播放| 久久噜噜噜精品国产亚洲综合| 国内精品久久久久久影视8| 欧美多人乱p欧美4p久久| 欧美一区二区三区艳史| 97精品久久久| 亚洲午夜av久久乱码| 久久99久国产精品黄毛片入口| 成人激情黄色网| 欧美成人在线免费视频| 日韩中文字幕在线视频播放| 欧美综合在线观看| 91久久久久久久久久久| 日韩精品在线免费观看| 北条麻妃一区二区三区中文字幕| 久久综合88中文色鬼| 日韩欧美中文字幕在线观看| 国产精品亚洲欧美导航| 亚洲精品xxxx| 啊v视频在线一区二区三区| 九九久久久久久久久激情| 日韩欧美国产中文字幕| 国产精品白丝av嫩草影院| 日韩av免费观影| 国产精品久久久久福利| 欧美亚洲午夜视频在线观看| 亚洲欧美日韩图片| 亚洲最大av网站| 91社影院在线观看| 欧美国产日产韩国视频| 中文字幕av一区二区三区谷原希美| 国产精品久久久久久久久影视| 久久精品99久久香蕉国产色戒| 亚洲精品91美女久久久久久久| 国内自拍欧美激情| 91免费综合在线| 久久久精品中文字幕| 日韩电影中文字幕av| 亚洲精品美女在线观看播放| 91精品久久久久久久| 日本精品一区二区三区在线播放视频| 国内精品久久久久| 国产精品永久免费在线| 91丨九色丨国产在线| 亚洲精品97久久| 国产成人小视频在线观看| 国产精品国产三级国产aⅴ9色| 久久天天躁日日躁| 欧美日韩另类视频| 亚洲综合自拍一区| 久久精品电影网| 色在人av网站天堂精品| 亚洲国产高潮在线观看| 国产视频精品一区二区三区| 久久6精品影院| 国产精品久久久久久av福利| 成人日韩在线电影| 77777少妇光屁股久久一区| 国产伦精品一区二区三区精品视频| 亚洲精品久久久久久久久| 亚洲天堂久久av| 国产精品福利在线观看| 欧美丰满老妇厨房牲生活| 国产欧美va欧美va香蕉在线| 国产精品久久久久影院日本| 国产精品av网站| 欧美午夜www高清视频| 国产自摸综合网| 欧美日韩中文字幕综合视频| 国产欧美亚洲视频| 日韩电影免费观看在线观看| 亚洲精选中文字幕| 国产一区二区三区免费视频| 国产小视频国产精品| 欧美性猛交xxxx黑人猛交| 亚洲性av网站| 成人黄色在线播放| 成人精品久久一区二区三区| 97精品国产97久久久久久| 亚洲aⅴ日韩av电影在线观看| 国产日产欧美精品| 欧美高清一级大片| 欧美又大粗又爽又黄大片视频| 日本在线精品视频| 欧美极品在线播放| 国内偷自视频区视频综合| 国产精品久久久久久av福利软件| 日韩**中文字幕毛片| 亚州欧美日韩中文视频| 亚洲999一在线观看www| 国产成人精品在线视频| 亚洲高清久久网| 狠狠色噜噜狠狠狠狠97| 欧美日韩国产中文字幕| 一区二区av在线| 国产精品一二三视频| 成人黄色免费网站在线观看| 亚洲男人的天堂在线播放| 91在线无精精品一区二区| 亚洲欧美一区二区激情| 久久亚洲影音av资源网| 日韩欧美成人区| 91精品国产网站| 亚洲精品中文字| 亚洲在线一区二区| 亚洲精品在线观看www| 国产va免费精品高清在线观看| 欧美老女人xx| 日韩成人免费视频| 欧美美女15p| 欧美一区第一页| 91视频88av|