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

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

C++ 迷宮游戲實現代碼

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

C++ 迷宮游戲實現代碼

題目 通過讓游戲角色自動尋找迷宮出口,走出迷宮,來練習C++面向對象之封裝的基礎知識。迷宮圖如下所示,其中X表示墻。
迷宮圖 

1、程序分析

走出去的原理:遵循右手規則或左手規則。右手扶墻走,就會走出迷宮,反之,亦然。

  step1 創建迷宮類,打印出迷宮地圖。
MazeMap類 

 step2 創建走迷宮的人的類。


MazeMan類 

2、程序實現

MazeMap.h

#ifndef MAZEMAP_H#define MAZEMAP_H#include <iostream>#include <Windows.h>  //COORD//在二維數組里,1代表墻,0代表路#define WALL 1#define ROAD 0class MazeMap{public:  MazeMap(char wall = 'X');  ~MazeMap();  /*設置迷宮地圖*/  void setMazeMap(int *mazemap, int row, int col);  void pintMazeMap();  int** getMap();             //返回地圖二維數組指針  const char m_cRoad;           //常數據成員:路  void setExitPosition(int x,int y);   //設置迷宮出口  COORD m_COORDExitPostion;  //迷宮的出口private:  const char m_cWall;     //常數據成員:墻  int** m_pMap;        //指向迷宮地圖二維數組的二級指針  int m_iMapRow;       //二維數組的行數  int m_iMapCol;       //二維數組的列數};#endif

MazeMap.cpp

#include "MazeMap.h"/***************************函數名稱:MazeMap()*函數功能:構造函數,初始化參數*函數參數:wall 墻的表示符號*修改時間:2016.7.18***************************/MazeMap::MazeMap(char wall):m_cWall(wall),m_cRoad(' '){  m_pMap = NULL;}/**************************函數名稱:~MazeMap()*函數功能:析構函數,釋放動態申請的內存空間*修改時間:2016.7.18**************************/MazeMap::~MazeMap(){  if(m_pMap)  {    for(int i = 0; i < m_iMapRow; i++)    {      delete m_pMap[i];      m_pMap[i] = NULL;    }    delete m_pMap;  }}/*********************************函數名稱:setMazeMap()*函數功能:設置迷宮地圖,傳遞參數*函數參數:*mazemap 存儲地圖數據的二維數組的指針*      row   二維數組的行數*      col   二維數組的列數*修改時間:2016.7.18**********************************/void MazeMap::setMazeMap(int *mazemap, int row, int col){  m_iMapRow = row;  m_iMapCol = col;  //為存儲迷宮地圖的二維數組動態分配內存空間  m_pMap = new int*[m_iMapRow];    //分配m_iMapRow個存儲int類型指針的內存空間  for(int i = 0; i < m_iMapRow; i++)     m_pMap[i] = new int[m_iMapCol]; //分配m_iMapCol個存儲int類型的內存空間  //將二維數組迷宮地圖的數據拷貝給二級指針  for(int i = 0; i < m_iMapRow; i++)  {    for(int j = 0; j < m_iMapCol; j++)    {      m_pMap[i][j] = *mazemap;      mazemap++;    }  }}/*************************************************函數名稱:pintMazeMap()*函數功能:打印迷宮地圖*修改時間:2016.7.18*************************************************/void MazeMap::pintMazeMap(){  system("cls");  for(int i = 0; i < m_iMapRow; i++)   {    for(int j = 0; j < m_iMapCol; j++)    {      if(m_pMap[i][j])      //數組元素為1,則打印代表墻的字符        std::cout << m_cWall;      else            //否則,打印代表路的字符        std::cout << m_cRoad;    }    std::cout << std::endl;  }}/*************************************************函數名稱:getMap()*函數功能:返回地圖二維數組指針*返 回 值:二級指針*修改時間:2016.7.18*************************************************/int** MazeMap::getMap(){  return m_pMap;}/*************************************************函數名稱:setExitPosition()*函數功能:設置迷宮的出口*函數參數:x 迷宮出口位置所在行數      y 迷宮出口位置所在列數*修改時間:2016.7.18*************************************************/void MazeMap::setExitPosition(int x, int y){  m_COORDExitPostion.X = x;  m_COORDExitPostion.Y = y;}

MazeMan.h

#ifndef MAZEMAN_H#define MAZEMAN_H#include <Windows.h>#include "MazeMap.h"enum direction{U,D,L,R};class MazeMan{public:  MazeMan(char man = 'T',char manface = R);  void setPosition(int x, int y);   //設置游戲角色位置  void setMap(MazeMap *map);     //設置地圖對象  bool walkUp();           //向上走  bool walkDown();          //向下走  bool walkLeft();          //向左走  bool walkRight();          //向右走  void moveForward(direction direct); //根據傳入的方向讓游戲角色前進一步   void start();            //游戲開始函數private:  char m_cMan;            //代表游戲角色的字符  char m_cManFace;          //游戲角色的朝向  int m_iSteps;            //記錄游戲角色已經走的步數  COORD m_COORDManCurrentPosition;  //游戲角色的當前位置  MazeMap *m_pMap;          //地圖對象};#endif

MazeMan.cpp

#include "MazeMan.h"/**************************函數名稱:MazeMan()*函數功能:構造函數,初始化數據成員*函數參數:man 表示游戲角色的字符      manface 游戲角色的朝向*修改時間:2016.7.18**************************/MazeMan::MazeMan(char man,char manface){  m_cMan = man;  m_cManFace = manface;  m_iSteps = 0;}/********************************函數名稱:setMap()*函數功能:設置地圖對象中的地圖*函數參數:*map 地圖對象的指針*修改時間:2016.7.18********************************/void MazeMan::setMap(MazeMap *map){  m_pMap = map;}/*******************************函數名稱:setPosition()*函數功能:設置游戲角色位置*函數參數:x 角色所在位置的橫坐標      y 角色所在位置的縱坐標*修改時間:2016.7.18********************************/void MazeMan::setPosition(int x, int y){  unsigned long numWritten;  //獲得命令行窗口的窗口句柄  HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  m_COORDManCurrentPosition.X = x;  m_COORDManCurrentPosition.Y = y;  //在指定坐標位置填充指定的字符,這里我們在游戲角色的當前位置填充代表游戲角色的字符,使游戲角色采出現  FillConsoleOutputCharacter(handle,m_cMan,1,m_COORDManCurrentPosition,&numWritten);  //參數說明:控制臺屏幕緩沖區句柄,要向控制臺緩沖區寫入的字符;應寫入的字符單元數;  //一個COORD結構,它指定字符的字符是要寫的第一個單元格的坐標;  //指向接收的實際寫入控制臺屏幕緩沖區的字符數的變量的指針。}/*************************************************函數名稱:moveForward()*函數功能:根據傳入的方向讓游戲角色前進一步*函數參數:direct 移動的方向*修改時間:2016.7.18*************************************************/void MazeMan::moveForward(direction direct){  unsigned long numWritten;  //獲取命令行窗口的窗口句柄  HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  //在指定坐標位置填充指定的字符,這里我們在游戲角色的當前位置填充空格,使游戲角色消失  FillConsoleOutputCharacter(handle,m_pMap->m_cRoad,1,m_COORDManCurrentPosition,&numWritten);  switch(direct)  {  case U:    m_COORDManCurrentPosition.Y -= 1;    break;  case D:    m_COORDManCurrentPosition.Y += 1;    break;  case L:    m_COORDManCurrentPosition.X -= 1;    break;  case R:    m_COORDManCurrentPosition.X += 1;    break;  default:    break;  }  //游戲角色坐標更新,在新的坐標  FillConsoleOutputCharacter(handle,m_cMan,1,m_COORDManCurrentPosition,&numWritten);  //移動完成后跟新游戲角色的朝向  m_cManFace = direct;}/*************************************************函數名稱:walkUp()*函數功能:向上走一步,若成功,則返回ture;若失敗,則返回false*修改時間:2016.7.18*************************************************/bool MazeMan::walkUp(){  if(m_pMap->getMap()[m_COORDManCurrentPosition.Y - 1][m_COORDManCurrentPosition.X])    return false;  else     moveForward(U);    return true;}/*************************************************函數名稱:walkDown()*函數功能:向下走一步,若成功,則返回ture;若失敗,則返回false*修改時間:2016.7.18*************************************************/bool MazeMan::walkDown(){  if(m_pMap->getMap()[m_COORDManCurrentPosition.Y + 1][m_COORDManCurrentPosition.X])    return false;  else     moveForward(D);    return true;}/*************************************************函數名稱:walkLeft()*函數功能:向左走一步,若成功,則返回ture;若失敗,則返回false*修改時間:2016.7.18*************************************************/bool MazeMan::walkLeft(){  if(m_pMap->getMap()[m_COORDManCurrentPosition.Y][m_COORDManCurrentPosition.X - 1])    return false;  else     moveForward(L);    return true;}/*************************************************函數名稱:walkRight()*函數功能:向右走一步,若成功,則返回ture;若失敗,則返回false*修改時間:2016.7.18*************************************************/bool MazeMan::walkRight(){  if(m_pMap->getMap()[m_COORDManCurrentPosition.Y][m_COORDManCurrentPosition.X + 1])    return false;  else     moveForward(R);    return true;}/*************************************************函數名稱:start()*函數功能:游戲開始函數*修改時間:2016.7.18*************************************************/void MazeMan::start(){  while(true)  {    m_pMap->pintMazeMap();    switch(m_cManFace)    {    case U:      //游戲角色朝上時,先向右,再向上,再向左,最后向下(右手原則)      walkRight() || walkUp() || walkLeft() || walkDown();      break;    case D:      walkLeft() || walkDown() || walkRight() || walkUp();      break;    case L:      walkUp() || walkLeft() || walkDown() || walkRight();      break;    case R:      walkDown() || walkRight() || walkUp() || walkLeft();      break;    default:      break;    }    m_iSteps++;    if(m_COORDManCurrentPosition.X == m_pMap->m_COORDExitPostion.X && m_COORDManCurrentPosition.Y == m_pMap->m_COORDExitPostion.Y)      break;    std::cout << "已經走了" << m_iSteps - 1 << "步";    Sleep(500);  }}

Main.cpp

#include "MazeMap.h"#include "MazeMan.h"#define MapRow 11    //迷宮地圖的行數#define MapCol 11    //迷宮地圖的列數int main(){  //定義并初始化存儲地圖數據的二維數組  int map[MapRow][MapCol] = {    {WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL},    {WALL, ROAD, ROAD, ROAD, WALL, ROAD, ROAD, ROAD, ROAD, ROAD, ROAD},    {WALL, ROAD, WALL, WALL, WALL, ROAD, WALL, WALL, WALL, ROAD, WALL},    {WALL, ROAD, ROAD, ROAD, WALL, ROAD, ROAD, ROAD, WALL, ROAD, WALL},    {WALL, ROAD, WALL, ROAD, WALL, ROAD, WALL, ROAD, WALL, WALL, WALL},    {WALL, ROAD, WALL, ROAD, ROAD, ROAD, WALL, ROAD, WALL, ROAD, WALL},    {WALL, ROAD, WALL, WALL, WALL, ROAD, WALL, WALL, WALL, ROAD, WALL},    {WALL, ROAD, WALL, ROAD, WALL, ROAD, ROAD, ROAD, WALL, ROAD, WALL},    {WALL, WALL, WALL, ROAD, WALL, WALL, WALL, ROAD, WALL, ROAD, WALL},    {ROAD, ROAD, ROAD, ROAD, ROAD, ROAD, ROAD, ROAD, ROAD, ROAD, WALL},    {WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL, WALL}  };  //從堆中實例化地圖對象  MazeMap *mm = new MazeMap();  mm->setMazeMap(&map[0][0],MapRow,MapCol);  mm->setExitPosition(10,1);  mm->pintMazeMap();  //從堆中實例化游戲角色對象  MazeMan *man = new MazeMan();  //設置角色起始位置  man->setPosition(0,9);  //設置游戲要走的地圖  man->setMap(mm);  //用new的方式從堆中實例化的對象,使用完畢之后需要手動釋放內存  man->start();  delete mm;  mm = NULL;  delete man;  man = NULL;  std::cout << "闖關成功!" << std::endl;  system("pause");}

3、運行結果

T代表人

這里寫圖片描述

這里寫圖片描述

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩最新在线视频| 国产精品日韩av| 国产精品av免费在线观看| 在线播放亚洲激情| 欧美精品一区在线播放| 91免费的视频在线播放| 狠狠色狠色综合曰曰| 国产欧美在线视频| 国产精自产拍久久久久久| 国内精品久久久久久久| 欧美成人精品不卡视频在线观看| 久久99久久99精品免观看粉嫩| 欧美日韩国产精品| 国产精品视频免费在线| 国产日韩精品在线播放| 午夜精品久久久久久久久久久久| 在线观看久久久久久| 国a精品视频大全| 精品国产美女在线| 久久久久久久一区二区三区| 国产不卡av在线免费观看| 日韩av手机在线看| 国产有码一区二区| 成人免费观看a| 久久精品国产电影| 黑丝美女久久久| 超碰97人人做人人爱少妇| 欧美xxxwww| 欧美肥臀大乳一区二区免费视频| 国产精品热视频| 在线视频免费一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 日韩精品在线播放| 亚洲第一页在线| 精品亚洲va在线va天堂资源站| 精品综合久久久久久97| 精品性高朝久久久久久久| 91性高湖久久久久久久久_久久99| 亚洲人成在线观| 亚洲欧洲视频在线| 国产日韩在线亚洲字幕中文| 福利精品视频在线| 国产精品久久久久一区二区| 国产亚洲精品美女久久久| 亚洲国产精久久久久久久| 欧美色欧美亚洲高清在线视频| 国产精品入口福利| 综合激情国产一区| 91经典在线视频| 精品在线观看国产| 欧美激情一级欧美精品| 97人洗澡人人免费公开视频碰碰碰| 欧美一区二区三区精品电影| 91久久精品国产91性色| 91精品久久久久久久久中文字幕| 国产精品永久免费在线| 91av免费观看91av精品在线| 97香蕉久久超级碰碰高清版| 国产精品国产三级国产aⅴ9色| 国产福利精品av综合导导航| 国产亚洲人成网站在线观看| 欧美国产日产韩国视频| 国产精品福利小视频| 欧美成人免费视频| 亚洲成人激情视频| 欧美午夜精品久久久久久浪潮| 57pao成人永久免费视频| 九九视频直播综合网| 久久精品国产v日韩v亚洲| 欧美精品一本久久男人的天堂| 亚洲视频日韩精品| 欧美性xxxx极品hd欧美风情| 国产一区二区成人| 亚洲曰本av电影| 欧美激情va永久在线播放| 欧美精品中文字幕一区| 久青草国产97香蕉在线视频| 欧美性xxxx极品高清hd直播| 国产深夜精品福利| 国产精品mp4| 亚洲国内精品视频| 日韩a**中文字幕| 国产欧洲精品视频| 欧美日韩国产一中文字不卡| 国产亚洲激情视频在线| 国产精品激情自拍| 国产精品专区第二| 一区二区亚洲精品国产| 日本aⅴ大伊香蕉精品视频| 韩国精品久久久999| 95av在线视频| 精品久久久久久国产| 国产精品色午夜在线观看| 免费不卡欧美自拍视频| www.久久撸.com| 欧美激情一级二级| 国产精品久久二区| 欧美视频二区36p| 成人av在线天堂| 国产亚洲精品久久久久久| 亚洲情综合五月天| 狠狠躁夜夜躁人人爽天天天天97| 97在线日本国产| 欧美激情2020午夜免费观看| 成人亚洲综合色就1024| 日本91av在线播放| 亚洲欧洲黄色网| 欧美久久久精品| 成人xxxxx| 亚洲一区二区三区在线免费观看| 亚洲欧美福利视频| 欧美性极品xxxx做受| 中文字幕亚洲综合| 成人免费视频xnxx.com| 91系列在线播放| 俺去了亚洲欧美日韩| 国产精品久久久久高潮| 操日韩av在线电影| 日本道色综合久久影院| 日本一区二区在线免费播放| 成人欧美在线观看| 日韩有码在线播放| 国产成人精品久久亚洲高清不卡| 亚洲精品丝袜日韩| 亚洲xxxxx| 亚洲91精品在线| 久久琪琪电影院| 色先锋资源久久综合5566| 国产精品久久视频| 美日韩丰满少妇在线观看| 欧美性猛交丰臀xxxxx网站| 精品色蜜蜜精品视频在线观看| 欧美最猛性xxxx| 美日韩丰满少妇在线观看| 亚洲男人天堂手机在线| 久久精品视频亚洲| 亚洲欧美中文在线视频| 国产精品久久久久久一区二区| 欧美激情视频一区二区| 国产精品视频网站| 在线日韩av观看| 欧美国产亚洲精品久久久8v| 国产91在线播放九色快色| 午夜精品美女自拍福到在线| 深夜福利国产精品| 国产精品久久久久久亚洲调教| 国产精品入口免费视| 国模视频一区二区| 欧美极品xxxx| 欧美网站在线观看| 欧美激情综合色综合啪啪五月| 欧美午夜宅男影院在线观看| 乱亲女秽乱长久久久| 国产精品自在线| 在线播放日韩专区| 欧美黄色免费网站| 国模吧一区二区| 亚洲第一男人天堂| 国产日韩在线一区| 久久久久久成人| 国产成人精品电影久久久| 久久久久久久一区二区| 在线观看国产欧美| 97在线视频免费播放|