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

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

C++實現五子棋游戲

2020-05-23 13:31:14
字體:
來源:轉載
供稿:網友

三子棋、五子棋之類的游戲,非常簡單,對于初學者來說是一個不錯的練手的小項目,以前用C語言寫過三子棋游戲。最近在看C++,所以就想到在三子棋的基礎上利用C++語言實現五子棋游戲。

主要功能:

有3個模式:0表示退出、1表示電腦vs玩家、2表示玩家vs玩家。

C++,五子棋

C++,五子棋

當一局完成之后選擇'y'則又會進入選擇模式。

C++,五子棋

源代碼(VS2013編譯器下寫的):

#include<iostream>#include<stdio.h>#include<stdlib.h>#include <time.h>using namespace std;const int N=15; //15*15的棋盤const char ChessBoardflag = ' '; //棋盤標志const char flag1='o'; //玩家1或電腦的棋子標志const char flag2='X'; //玩家2的棋子標志typedef struct Coordinate //坐標類{    int x; //代表行  int y; //代表列}Coordinate;class GoBang //五子棋類{ public:  GoBang() //初始化  {    InitChessBoard();  }  void Play() //下棋  {    Coordinate Pos1; // 玩家1或電腦    Coordinate Pos2; //玩家2    int n = 0;    while (1)    {      int mode = ChoiceMode();      while (1)      {        if (mode == 1) //電腦vs玩家        {          ComputerChess(Pos1,flag1); // 電腦下棋          if (GetVictory(Pos1, 0, flag1) == 1) //0表示電腦,真表示獲勝            break;          PlayChess(Pos2, 2, flag2); //玩家2下棋          if (GetVictory(Pos2, 2, flag2)) //2表示玩家2            break;        }        else      //玩家1vs玩家2        {          PlayChess(Pos1, 1, flag1); // 玩家1下棋          if (GetVictory(Pos1, 1, flag1)) //1表示玩家1            break;          PlayChess(Pos2, 2, flag2); //玩家2下棋          if (GetVictory(Pos2, 2, flag2)) //2表示玩家2            break;        }      }      cout << "***再來一局***" << endl;      cout << "y or n :";      char c = 'y';      cin >> c;      if (c == 'n')        break;    }      }protected:  int ChoiceMode() //選擇模式  {    int i = 0;    system("cls"); //系統調用,清屏    InitChessBoard(); //重新初始化棋盤    cout << "***0、退出 1、電腦vs玩家 2、玩家vs玩家***" << endl;    while (1)    {      cout << "請選擇:";      cin >> i;      if (i == 0) //選擇0退出        exit(1);      if (i == 1 || i == 2)        return i;      cout << "輸入不合法" << endl;    }  }  void InitChessBoard() //初始化棋盤  {    for (int i = 0; i < N + 1; ++i)       {      for (int j = 0; j < N + 1; ++j)      {        _ChessBoard[i][j] = ChessBoardflag;      }    }  }  void PrintChessBoard() //打印棋盤,這個函數可以自己調整  {    system("cls"); //系統調用,清空屏幕    for (int i = 0; i < N+1; ++i)    {      for (int j = 0; j < N+1; ++j)      {        if (i == 0) //打印列數字        {          if (j!=0)            printf("%d ", j);          else            printf("  ");        }        else if (j == 0) //打印行數字          printf("%2d ", i);        else        {          if (i < N+1)          {            printf("%c |",_ChessBoard[i][j]);          }        }      }      cout << endl;      cout << "  ";      for (int m = 0; m < N; m++)      {        printf("--|");      }      cout << endl;    }  }  void PlayChess(Coordinate& pos, int player, int flag) //玩家下棋  {    PrintChessBoard(); //打印棋盤    while (1)    {      printf("玩家%d輸入坐標:", player);      cin >> pos.x >> pos.y;      if (JudgeValue(pos) == 1) //坐標合法        break;      cout << "坐標不合法,重新輸入" << endl;    }    _ChessBoard[pos.x][pos.y] = flag;  }  void ComputerChess(Coordinate& pos, char flag) //電腦下棋  {    PrintChessBoard(); //打印棋盤    int x = 0;    int y = 0;    while (1)    {      x = (rand() % N) + 1; //產生1~N的隨機數      srand((unsigned int) time(NULL));      y = (rand() % N) + 1; //產生1~N的隨機數      srand((unsigned int) time(NULL));      if (_ChessBoard[x][y] == ChessBoardflag) //如果這個位置是空的,也就是沒有棋子        break;    }    pos.x = x;    pos.y = y;    _ChessBoard[pos.x][pos.y] = flag;  }  int JudgeValue(const Coordinate& pos) //判斷輸入坐標是不是合法  {    if (pos.x > 0 && pos.x <= N&&pos.y > 0 && pos.y <= N)    {      if (_ChessBoard[pos.x][pos.y] == ChessBoardflag)      {        return 1; //合法      }    }    return 0; //非法  }  int JudgeVictory(Coordinate pos, char flag) //判斷有沒有人勝負(底層判斷)  {    int begin = 0;    int end = 0;    int begin1 = 0;    int end1 = 0;    //判斷行是否滿足條件    (pos.y - 4) > 0 ? begin = (pos.y - 4) : begin = 1;    (pos.y + 4) >N ? end = N : end = (pos.y + 4);    for (int i = pos.x, j = begin; j + 4 <= end; j++)    {      if (_ChessBoard[i][j] == flag&&_ChessBoard[i][j + 1] == flag&&        _ChessBoard[i][j + 2] == flag&&_ChessBoard[i][j + 3] == flag&&        _ChessBoard[i][j + 4] == flag)        return 1;    }    //判斷列是否滿足條件    (pos.x - 4) > 0 ? begin = (pos.x - 4) : begin = 1;    (pos.x + 4) > N ? end = N : end = (pos.x + 4);    for (int j = pos.y, i = begin; i + 4 <= end; i++)    {      if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j] == flag&&        _ChessBoard[i + 2][j] == flag&&_ChessBoard[i + 3][j] == flag&&        _ChessBoard[i + 4][j] == flag)        return 1;    }    int len = 0;    //判斷主對角線是否滿足條件    pos.x > pos.y ? len = pos.y - 1 : len = pos.x - 1;    if (len > 4)      len = 4;    begin = pos.x - len; //橫坐標的起始位置    begin1 = pos.y - len; //縱坐標的起始位置    pos.x > pos.y ? len = (N - pos.x) : len = (N - pos.y);    if (len>4)      len = 4;    end = pos.x + len; //橫坐標的結束位置    end1 = pos.y + len; //縱坐標的結束位置    for (int i = begin, j = begin1; (i + 4 <= end) && (j + 4 <= end1); ++i, ++j)    {      if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j + 1] == flag&&        _ChessBoard[i + 2][j + 2] == flag&&_ChessBoard[i + 3][j + 3] == flag&&        _ChessBoard[i + 4][j + 4] == flag)        return 1;    }    //判斷副對角線是否滿足條件    (pos.x - 1) >(N - pos.y) ? len = (N - pos.y) : len = pos.x - 1;    if (len > 4)      len = 4;    begin = pos.x - len; //橫坐標的起始位置    begin1 = pos.y + len; //縱坐標的起始位置    (N - pos.x) > (pos.y - 1) ? len = (pos.y - 1) : len = (N - pos.x);    if (len>4)      len = 4;    end = pos.x + len; //橫坐標的結束位置    end1 = pos.y - len; //縱坐標的結束位置    for (int i = begin, j = begin1; (i + 4 <= end) && (j - 4 >= end1); ++i, --j)    {      if (_ChessBoard[i][j] == flag&&_ChessBoard[i + 1][j - 1] == flag&&        _ChessBoard[i + 2][j - 2] == flag&&_ChessBoard[i + 3][j - 3] == flag&&        _ChessBoard[i + 4][j - 4] == flag)        return 1;    }    for (int i = 1; i < N + 1; ++i) //棋盤有沒有下滿    {      for (int j =1; j < N + 1; ++j)      {        if (_ChessBoard[i][j] == ChessBoardflag)         return 0; //0表示棋盤沒滿      }     }    return -1; //和棋  }  bool GetVictory(Coordinate& pos, int player, int flag) //對JudgeVictory的一層封裝,得到具體那個玩家獲勝  {    int n = JudgeVictory(pos, flag); //判斷有沒有人獲勝    if (n != 0)  //有人獲勝,0表示沒有人獲勝    {      PrintChessBoard();      if (n == 1) //有玩家贏棋      {        if (player == 0) //0表示電腦獲勝,1表示玩家1,2表示玩家2          printf("***電腦獲勝***/n");        else          printf("***恭喜玩家%d獲勝***/n", player);      }      else        printf("***雙方和棋***/n");      return true; //已經有人獲勝    }    return false; //沒有人獲勝  }private:  char _ChessBoard[N+1][N+1];   };

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91香蕉国产在线观看| 亚洲国产精品视频在线观看| 最近的2019中文字幕免费一页| 中文字幕在线日韩| 国产一区欧美二区三区| 日韩有码视频在线| 国产精品黄视频| 国产中文字幕亚洲| 欧美电影《睫毛膏》| 国产精品久久久久久久av大片| 在线日韩av观看| 欧美在线亚洲一区| 在线免费观看羞羞视频一区二区| 九九九热精品免费视频观看网站| 日韩美女视频免费看| 成人免费看片视频| 成人h视频在线观看播放| 国产精品激情av电影在线观看| 在线观看视频99| 77777亚洲午夜久久多人| 欧美日韩一区二区免费视频| 欧美成人免费小视频| 日韩欧亚中文在线| 性欧美在线看片a免费观看| 欧美成人四级hd版| 久久久精品久久久久| 最近2019年日本中文免费字幕| 亚洲国产女人aaa毛片在线| 91老司机精品视频| 在线观看免费高清视频97| 91久久在线视频| 91精品国产综合久久久久久久久| 久久免费国产视频| 亚洲视频一区二区| 欧美日韩免费区域视频在线观看| 欧美国产极速在线| 午夜精品美女自拍福到在线| 日韩精品极品在线观看| 欧美人成在线视频| 亚洲男人天堂古典| 国产在线观看91精品一区| 亚洲第一av网站| 国产综合色香蕉精品| 最近中文字幕2019免费| 日韩欧美在线第一页| 97在线精品视频| 国产精品99蜜臀久久不卡二区| 欧美影院久久久| 欧美在线视频免费观看| 国产suv精品一区二区| 日韩视频免费在线观看| 九九精品视频在线观看| 日韩av片电影专区| 欧美亚洲国产成人精品| 91在线视频精品| 91久久久久久久| 国产69精品久久久久9999| 精品电影在线观看| 亚洲黄色av网站| 中文字幕视频一区二区在线有码| 97国产精品久久| 久久久久久久一| 精品亚洲一区二区三区在线观看| 欧美激情免费看| 欧美激情按摩在线| 亚洲丁香婷深爱综合| 91亚洲精品在线观看| 欧美在线日韩在线| 亚洲free嫩bbb| 日韩av在线免费播放| 欧美在线一区二区视频| 欧美在线一级va免费观看| 青青a在线精品免费观看| 国产午夜精品全部视频播放| 成人黄色av免费在线观看| 午夜精品久久久久久久99热浪潮| 久久精品国产亚洲精品2020| 成人免费观看a| 亚洲精品99久久久久| 国产一区二区在线播放| 欧美日本高清一区| 国产精品视频一区二区三区四| 日韩美女免费视频| 97精品国产91久久久久久| 欧美电影在线观看高清| 欧美电影院免费观看| 亚洲精品国产精品国自产观看浪潮| 欧美成年人视频网站| 欧美一级淫片丝袜脚交| 国产亚洲精品成人av久久ww| 成人午夜一级二级三级| 亚洲欧洲中文天堂| 国产午夜一区二区| 正在播放欧美视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲精品久久在线| 精品国产999| 91精品免费久久久久久久久| 精品一区二区三区电影| 精品露脸国产偷人在视频| 久久久成人av| 久久中文字幕视频| 亚洲第一偷拍网| 欧美大奶子在线| 亚洲福利视频网| 日韩女优人人人人射在线视频| 国产成人av在线播放| 日韩av在线免费观看| 国产精品一二三视频| 日韩av在线播放资源| 欧美又大粗又爽又黄大片视频| 亚洲精品国产综合区久久久久久久| 中文在线资源观看视频网站免费不卡| 亚洲加勒比久久88色综合| 操人视频在线观看欧美| 国产精品久久久久久久av大片| 97国产精品视频人人做人人爱| 综合激情国产一区| 精品久久久久久中文字幕一区奶水| 久久久久久久亚洲精品| 国外日韩电影在线观看| 亚洲成人激情小说| 日韩av中文字幕在线| 亚洲国产精彩中文乱码av在线播放| 中文字幕精品一区二区精品| 欧美在线视频在线播放完整版免费观看| 国产精品一二三在线| 欧洲日韩成人av| 欧美黄色性视频| 亚洲性生活视频| 色先锋资源久久综合5566| 亚洲精品视频免费| 欧美激情日韩图片| 欧美天堂在线观看| 精品国产拍在线观看| 国产精品专区h在线观看| 九九视频这里只有精品| 91欧美日韩一区| 成人免费网视频| 亚洲人成电影网站色…| 欧美日韩亚洲成人| 亚洲xxxx妇黄裸体| 综合激情国产一区| 欧美成人中文字幕在线| 国产拍精品一二三| 亚洲人在线视频| 精品国偷自产在线视频99| 国产精品一区久久| 日韩精品在线视频美女| 欧美日韩在线影院| 日韩av三级在线观看| 国产午夜精品一区二区三区| 91麻豆国产语对白在线观看| 日韩成人在线视频观看| 国外成人在线视频| 91久久久久久久| 欧美成人精品在线播放| 国产精品www| 欧美成人小视频| 精品久久久久久久久国产字幕| 亚洲高清一区二| 日韩在线观看网站| 精品视频在线导航| 久久精品久久久久久国产 免费|