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

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

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

2020-05-23 14:05:04
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了C++實現簡單的掃雷游戲,控制臺版的掃雷游戲希望大家喜歡,感興趣的小伙伴們可以參考一下
 

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();}

效果圖:

C++,掃雷游戲

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



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产69久久精品成人看| 亚洲自拍在线观看| 欧美亚洲视频一区二区| 精品视频在线播放色网色视频| 亚洲激情国产精品| 欧美精品videossex88| 日本精品视频在线观看| 日韩福利在线播放| 日韩在线免费高清视频| 国产综合久久久久久| 久久久久一本一区二区青青蜜月| 国产亚洲精品激情久久| 久久久久久久久综合| 中文国产成人精品久久一| 亚洲网站视频福利| 欧美日韩亚洲国产一区| 欧美第一黄色网| 国模极品一区二区三区| www国产亚洲精品久久网站| 久久亚洲精品小早川怜子66| 精品国偷自产在线视频99| 国产日韩在线亚洲字幕中文| 国产98色在线| 久久久久久久国产精品视频| 色噜噜狠狠狠综合曰曰曰88av| 亚洲激情小视频| 日韩视频在线一区| 日韩精品视频在线观看免费| 亚洲视频在线观看| 日韩美女视频中文字幕| 97久久精品国产| 亚洲国产精品va在线看黑人| 日韩在线视频网站| 欧美精品激情blacked18| 国产精品午夜视频| 亚洲欧美日韩国产中文| 欧美激情在线一区| 日韩大片在线观看视频| 成人精品一区二区三区电影黑人| 91成人性视频| 亚洲成**性毛茸茸| zzijzzij亚洲日本成熟少妇| 国产日韩在线观看av| 尤物yw午夜国产精品视频明星| 久久中文精品视频| 97视频免费看| 欧美色欧美亚洲高清在线视频| 91免费观看网站| 欧美性猛交xxxx黑人| 欧美孕妇与黑人孕交| 91极品女神在线| 一级做a爰片久久毛片美女图片| 亚洲美女喷白浆| 欧美在线视频在线播放完整版免费观看| 亚洲精品一区在线观看香蕉| 中文字幕久热精品在线视频| 欧美国产极速在线| 久久精品99久久久久久久久| 欧美高清视频免费观看| 欧美精品久久一区二区| 欧美精品aaa| 91久久久久久国产精品| 欧美三级免费观看| 国产精品狠色婷| 伦伦影院午夜日韩欧美限制| 92版电视剧仙鹤神针在线观看| 久久91精品国产91久久久| 日韩亚洲成人av在线| 日本精品一区二区三区在线| 欧美福利视频在线观看| 亚洲第一福利网| 这里只有精品在线观看| 欧美精品手机在线| 91国产美女视频| 国产偷国产偷亚洲清高网站| 国产亚洲综合久久| 亚洲国产精品电影| 成人av在线天堂| 亚洲少妇激情视频| 欧美麻豆久久久久久中文| 亚洲天堂一区二区三区| 欧美激情精品久久久久久蜜臀| 亚洲色图色老头| 中文字幕一区电影| 操人视频在线观看欧美| 国产女人18毛片水18精品| 亚洲free性xxxx护士hd| 精品色蜜蜜精品视频在线观看| 日韩欧美成人免费视频| 欧美亚洲国产日韩2020| 综合av色偷偷网| 久久久久久久久91| 亚洲视频电影图片偷拍一区| 欧美黄色三级网站| 国产亚洲成av人片在线观看桃| 欧美激情影音先锋| 亚洲视频在线免费看| 欧美一级大胆视频| 欧美精品日韩www.p站| 中文字幕9999| 欧美老女人xx| 日韩动漫免费观看电视剧高清| 国产在线精品自拍| 欧美国产极速在线| 国产亚洲欧美日韩美女| 国产一区二区三区视频| 18性欧美xxxⅹ性满足| 91伊人影院在线播放| 日韩视频欧美视频| 国产精品午夜国产小视频| 日韩精品亚洲元码| 欧美又大又硬又粗bbbbb| 欧美激情视频一区| 国产精品网红福利| 欧美一性一乱一交一视频| 欧美区二区三区| 国产精品成人av在线| 日韩在线免费视频| 国产精品丝袜久久久久久高清| 欧美多人爱爱视频网站| 狠狠干狠狠久久| 亚洲字幕在线观看| 国内精品一区二区三区四区| 日韩av在线网| 在线视频精品一| 精品久久香蕉国产线看观看gif| 自拍亚洲一区欧美另类| 夜夜嗨av色综合久久久综合网| 国产中文日韩欧美| 蜜臀久久99精品久久久无需会员| 日韩中文字幕视频| 欧美成人激情视频免费观看| 中文字幕亚洲综合久久筱田步美| 欧美一区二区三区免费观看| 中文字幕日韩在线观看| 亚洲天堂男人的天堂| 国产精品久久久久久婷婷天堂| 久久国产精品久久久久久久久久| 91av在线国产| 动漫精品一区二区| 95av在线视频| 91精品国产综合久久久久久蜜臀| 日韩有码在线播放| 国产日韩欧美电影在线观看| 91精品国产自产在线老师啪| 亚洲 日韩 国产第一| 欧美有码在线观看| 欧美视频在线观看免费网址| 成人欧美一区二区三区在线| 国产综合在线观看视频| 国产婷婷色综合av蜜臀av| 91亚洲人电影| 亚洲黄色有码视频| 久久九九热免费视频| 国产亚洲精品久久久久久| 亚洲精品免费网站| 欧美日韩国产成人| 免费99精品国产自在在线| 91国偷自产一区二区三区的观看方式| 精品欧美国产一区二区三区| 在线观看不卡av| 日韩欧美在线播放| 欧美人交a欧美精品| 国产精品偷伦视频免费观看国产|