c++面向對象編程小實戰(第2篇*下)

c++面向對象編程小實戰(第2篇*下)

我們直接開始Maze_Map類的所有方法,當然在開始我們要先引用頭文件

#include <iostream>#include "Maze_Map.h" //用引號是為了和c++自帶的頭文件做區分

我們之前定義了4個靜態變數,所以優先初始化這4個變數:

//靜態數據需要先初始化char Maze_Map::m_Road = ;int Maze_Map::m_Width = 0;int Maze_Map::m_Height = 0;int Maze_Map::m_MapArr[screenHeight][screenWidth];

無參構造函數Maze_Map()進行初始化迷宮( :m_mazeWall(*)初始化迷宮牆體的字元):

Maze_Map::Maze_Map() :m_mazeWall(*){ m_Height = 20; m_Width = 60;}

有參構造函數MazeMap(int *mazeMap, int row, int column)初始化迷宮的寬和高,牆壁和通路默認,row:迷宮地圖數組的行數,column:迷宮地圖數組的列數:

Maze_Map::Maze_Map(int *mazeMap, int row, int column){ m_Height = column; m_Width = row; for (int i = 0; i < row;i++) for (int j = 0; j < column; j++) { m_MapArr[i][j] = *mazeMap; mazeMap++; }}

方法setWall(char wall)設置牆體的字元;setRoad(char road)設置路的字元:

void Maze_Map::setWall(char wall){ m_mazeWall = wall;}void Maze_Map::setRoad(char road){ m_Road = road;}

setMaze_Map(int *mazeMap, int row, int column)重新設置迷宮地圖:

void Maze_Map::setMaze_Map(int *mazeMap, int row, int column){ m_Height = column; m_Width = row; for (int i = 0; i < row; i++) for (int j = 0; j < column; j++) { m_MapArr[i][j] = *mazeMap; mazeMap++; }}

defaultMode()用於使用默認地圖,即沒有自己定義地圖可以調用它來創建系統自帶的地圖:

void Maze_Map::defaultMode(){ int mazeMap1[6][6] = { { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, ROAD, ROAD, ROAD, ROAD, WALL }, { WALL, ROAD, WALL, WALL, ROAD, WALL }, { WALL, ROAD, WALL, WALL, WALL, WALL } }; setMaze_Map(&mazeMap1[0][0],6,6);}

drawMaze_Map()繪製迷宮地圖:

void Maze_Map::drawMaze_Map()const{ for (int i = 0; i < m_Width; i++) { for (int j = 0; j < m_Height; j++) { if (m_MapArr[i][j] == 1) cout << m_mazeWall; if (m_MapArr[i][j] == 0) cout << m_Road; } cout << endl; }}

getRoadChar()獲取表示通路的字元:

char Maze_Map::getRoadChar(){ return m_Road;}

checkWall_Not()靜態方法(只能使用靜態變數),檢查該位置上是否是牆壁,返回內容:true:是 false:不是:

bool Maze_Map::checkWall_Not(int mazeX, int mazeY){ if (m_MapArr[mazeX][mazeY] == WALL) { return true; } else { return false; }}

checkMazeDoor()靜態方法,檢查該位置是否是出口,返回內容:true:是 false:不是:

bool Maze_Map::checkMazeDoor(int mazeX, int mazeY){ if (mazeX == 0 || mazeX == (m_Width - 1))//判斷左右兩邊是否有出口 { if (m_MapArr[mazeX][mazeY] == ROAD) { return true; } }//判斷上下兩端是否有出口 if (mazeY == 0 || mazeY == (m_Height - 1)) { if (m_MapArr[mazeX][mazeY] == ROAD) { return true; } } return false;}

——————————————————————————————————————

以下為全部源碼:

/***************************************************************************** 類的名稱:Maze_Map 功能:設置迷宮的地圖 函數列表://構造函數,優先使用默認地圖 Maze_Map(); //*mazeMap 地圖二維數組首地址,row行數, column地圖數組的列數 Maze_Map(int *mazeMap,int row,int column); void setWall(char wall);//設置牆體的字元 void setRoad(char road);//設置路的字元 //設置迷宮的默認地圖 void defaultMode(); void setMaze_Map(int *mazeMap, int row, int column);//重新設置地圖 void drawMaze_Map()const;//繪製迷宮地圖 static char getRoadChar();//得到路的字元 static bool checkWall_Not(int mazeX,int mazeY);//檢查是否遇到了牆壁 static bool checkMazeDoor(int mazeX ,int mazeY);//檢查是否遇到了大門或出口 類中所有的變數:char m_mazeWall;//聲明迷宮表示的字元 static char m_Road;//迷宮的路的字元 static int m_Width;//迷宮的寬度 static int m_Height;//迷宮的高度 static int m_MapArr[screenHeight][screenWidth];//聲明地圖高寬的數組******************************************************************************/#include <iostream>#include "Maze_Map.h"using namespace std;//靜態數據需要先初始化char Maze_Map::m_Road = ;int Maze_Map::m_Width = 0;int Maze_Map::m_Height = 0;int Maze_Map::m_MapArr[screenHeight][screenWidth];/*Maze_Map() 功能:初始化迷宮*/Maze_Map::Maze_Map() :m_mazeWall(*){ m_Height = 20; m_Width = 60;}/** 構造函數:MazeMap* 函數功能:初始化迷宮的寬和高,牆壁和通路默認* 參數列表:* row:迷宮地圖數組的行數* column:迷宮地圖數組的列數*/Maze_Map::Maze_Map(int *mazeMap, int row, int column){ m_Height = column; m_Width = row; for (int i = 0; i < row;i++) for (int j = 0; j < column; j++) { m_MapArr[i][j] = *mazeMap; mazeMap++; }}/* void setWall(char wall) 功能:設置牆體的字元 void setRoad(char road) 功能:設置路的字元 */void Maze_Map::setWall(char wall){ m_mazeWall = wall;}void Maze_Map::setRoad(char road){ m_Road = road;}/*void setMaze_Map(int *mazeMap, int row, int column) 功能:重新設置迷宮地圖。*/void Maze_Map::setMaze_Map(int *mazeMap, int row, int column){ m_Height = column; m_Width = row; for (int i = 0; i < row; i++) for (int j = 0; j < column; j++) { m_MapArr[i][j] = *mazeMap; mazeMap++; }}/** 函數名稱:defaultMode* 函數功能:使用默認地圖* 返回內容:無*/void Maze_Map::defaultMode(){ int mazeMap1[6][6] = { { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, WALL, WALL, WALL, ROAD, WALL }, { WALL, ROAD, ROAD, ROAD, ROAD, WALL }, { WALL, ROAD, WALL, WALL, ROAD, WALL }, { WALL, ROAD, WALL, WALL, WALL, WALL } }; setMaze_Map(&mazeMap1[0][0],6,6);}/** 函數名稱:drawMaze_Map* 函數功能:繪製迷宮地圖* 返回內容:無*/void Maze_Map::drawMaze_Map()const{ for (int i = 0; i < m_Width; i++) { for (int j = 0; j < m_Height; j++) { if (m_MapArr[i][j] == 1) cout << m_mazeWall; if (m_MapArr[i][j] == 0) cout << m_Road; } cout << endl; }}/** 函數名稱:getRoadChar* 函數功能:獲取表示通路的字元* 返回內容:表示通路的字元*/char Maze_Map::getRoadChar(){ return m_Road;}/** 函數名稱:checkWall_Not* 函數功能:靜態方法,檢查該位置上是否是牆壁* 返回內容:true:是 false:不是*/bool Maze_Map::checkWall_Not(int mazeX, int mazeY){ if (m_MapArr[mazeX][mazeY] == WALL) { return true; } else { return false; }}/** 函數名稱:checkMazeDoor* 函數功能:靜態方法,檢查該位置是否是出口* 返回內容:true:是 false:不是*/bool Maze_Map::checkMazeDoor(int mazeX, int mazeY){ if (mazeX == 0 || mazeX == (m_Width - 1))//判斷左右兩邊是否有出口 { if (m_MapArr[mazeX][mazeY] == ROAD) { return true; } } //判斷上下兩端是否有出口 if (mazeY == 0 || mazeY == (m_Height - 1)) { if (m_MapArr[mazeX][mazeY] == ROAD) { return true; } } return false;}

推薦閱讀:

轉基因食品對人體健康和生態環境是否有害?
從三好網再獲融資,看互聯網教育下半場該如何贏?
業界 | 風寧:我是誰?讓這個小視頻告訴你
【VR晚報】VR直播公司NextVR將獲得中信國安2000萬美元投資

TAG:面向對象編程 | 科技 | 編程 |