寫在開始:這個(gè)博客建于大二下學(xué)期。2年多的學(xué)習(xí),從網(wǎng)上借鑒的大牛經(jīng)驗(yàn),代碼,指導(dǎo)數(shù)不勝數(shù),而其中大部分來自別人的博客,于是期待有一天也能把自己在學(xué)習(xí)過程中的一些經(jīng)驗(yàn)?zāi)贸鰜砼c大家分享。后來大概覺得離大牛太遠(yuǎn),就沒敢再奢望指導(dǎo)別人,反而希望有大牛能偶爾看到,給予指導(dǎo),也算不負(fù)初衷。
其實(shí)我凝望了C++已經(jīng)快2年了,也沒見它回望于我。標(biāo)題叫新手村的復(fù)活點(diǎn),大概是因?yàn)樵陂_始的地方就一直被小問題打倒吧。
下面是最近兩天寫的一個(gè)小程序,算是對(duì)C++的一個(gè)小小的復(fù)習(xí),這個(gè)小游戲已經(jīng)拖了半年,已經(jīng)忘記了當(dāng)時(shí)寫它的初衷。
以下是main.cpp
#include <iostream>#include <windows.h>#include <string>#include "mazeMap.h"#include "mazePerson.h"using namespace std;int main() { int Map[8][8] = {//要求地圖入口在最下面,出口在最右面 {0,0,0,0,0,0,0,0},//map[0][0:7] {0,0,1,1,0,0,0,0},//map[1][0:7] {0,0,0,1,1,1,1,1},//map[2][0:7] {0,1,1,0,0,1,0,0},//map[3][0:7] {0,0,1,0,0,1,1,0},//map[4][0:7] {0,1,1,0,1,1,0,0},//map[5][0:7] {0,1,1,1,1,0,0,0},//map[6][0:7] {0,0,1,0,0,0,0,0} //map[7][0:7] }; mazeMap map1; map1.setmazeMap((int **)Map,8,8);//傳入地圖數(shù)組參數(shù) map1.setmazeWall('*');//設(shè)置墻的樣式 mazePerson People(map1); Faceto faceto; faceto = _up; People.setPersonSpeed(MID);//設(shè)置移動(dòng)速度 People.setPersonShap('T');//設(shè)置人物樣式 People.start(faceto); return 0; }
以下是mazeMap.h
#ifndef MAZEMAP_H_INCLUDED#define MAZEMAP_H_INCLUDED#include <string>const bool Wall(0);class mazeMap{public: mazeMap(); mazeMap(const mazeMap &_mazeMap); ~mazeMap(); void setmazeMap(int **_mazeArr,int _col,int _row); void setmazeWall(char _wall); void drawMap(); void detTerpoint(int *originPoint,int *destination); int getCol(); int getROw(); int **getArradd(); char m_chWall; char m_chRoad = ' ';private: int m_iCol; int m_iRow; int m_iOriginpoint[2]; int m_iTerpoint[2]; int **m_mazeArr; };#endif // MAZEMAP_H_INCLUDED
以下是mazeMap.cpp
#include <iostream>#include <string>#include "mazeMap.h"using namespace std; mazeMap::mazeMap() { m_chWall = ' '; m_chRoad = ' '; m_iCol = 0; m_iRow = 0; m_iOriginpoint[0] = 0; m_iOriginpoint[1] = 0; m_iTerpoint[0] = 0; m_iTerpoint[1] = 0; m_mazeArr = NULL; } mazeMap::mazeMap(const mazeMap &_mazeMap) { m_iCol = _mazeMap.m_iCol; m_iRow = _mazeMap.m_iRow; m_chRoad = _mazeMap.m_chRoad; m_chWall = _mazeMap.m_chWall; m_mazeArr = _mazeMap.m_mazeArr; m_iOriginpoint[0] = _mazeMap.m_iOriginpoint[0]; m_iOriginpoint[1] = _mazeMap.m_iOriginpoint[1]; m_iTerpoint[0] = _mazeMap.m_iTerpoint[0]; m_iTerpoint[1] = _mazeMap.m_iTerpoint[1]; } mazeMap::~mazeMap() { for (int i = 0;i < m_iRow;i++) { delete []m_mazeArr[i]; m_mazeArr[i] = NULL; } }void mazeMap::setmazeMap(int **mazeArr,int _col,int _row) { m_mazeArr = mazeArr; m_iCol = _col; m_iRow = _row; }void mazeMap::setmazeWall(char _wall) { m_chWall = _wall; }void mazeMap::detTerpoint(int *originPoint,int *destination)//迷宮地圖入口在最下面,出口在最上面{ int i = 0; int j = m_iRow-1; for (i = 0;i<m_iCol;i++)//出口在最右邊一列 { if((*(m_mazeArr + m_iCol*i +j))!=Wall) { m_iTerpoint[0] = i; m_iTerpoint[1] = j; } } i = m_iCol-1; for (j = 0;j<m_iRow;j++) { if((*(m_mazeArr + m_iCol*i +j))!=Wall) { m_iOriginpoint[0] = i; m_iOriginpoint[1] = j; } } destination[0] = m_iTerpoint[0]; destination[1] = m_iTerpoint[1]; originPoint[0] = m_iOriginpoint[0]; originPoint[1] = m_iOriginpoint[1]; }void mazeMap::drawMap() { for (int i = 0;i < m_iCol;i++) { for (int j = 0;j < m_iRow;j++) { if (*(m_mazeArr + m_iCol*i + j) == Wall) { cout<<m_chWall; } else { cout<<m_chRoad; } } cout<<endl; } }int mazeMap::getCol() { return m_iCol; }int mazeMap::getROw() { return m_iRow; }int **mazeMap::getArradd() { return m_mazeArr; }
以下是mazePerson.h
#ifndef MAZEPERSON_H_INCLUDED#define MAZEPERSON_H_INCLUDED#include <string>#include <iostream>#include <windows.h>#include "mazeMap.h"using namespace std;enum Faceto{_up,_down,_left,_right};enum Speed{LOW,MID,FAST};class mazePerson{public: mazePerson(); mazePerson(mazeMap _mazeMap); ~mazePerson(); void setPersonPosition(int _row,int _col); void setPersonSpeed(Speed _speed); void setPersonShap(char _Person); Faceto turn(Faceto _faceto); void start(Faceto _faceto); void gotoyx(int x,int y); mazeMap m_mazeMap;private: char m_chPerson; Faceto m_Faceto; int m_iNowLocal[2]; int m_iPreviousLocal[2]; int destination[2] = {0,0}; int originPoint[2] = {0,0}; Speed m_Speed; };#endif // MAZEPERSON_H_INCLUDED
以下是mazePerson.cpp
#include <iostream>#include <string>#include <windows.h>#include "mazePerson.h"using namespace std; mazePerson::mazePerson() { m_chPerson = 'Y'; m_Faceto = _up; m_Speed = LOW; m_iNowLocal[0] = 0;//行 m_iNowLocal[1] = 1;//列 m_iPreviousLocal[0] = 0; m_iPreviousLocal[1] = 0; mazeMap m_mazeMap; } mazePerson::mazePerson(mazeMap _mazeMap) { m_chPerson = 'Y'; m_Faceto = _up; m_Speed = LOW; m_iNowLocal[0] = 0;//coord X m_iNowLocal[1] = 1;//coord Y m_iPreviousLocal[0] = 0; m_iPreviousLocal[1] = 0; m_mazeMap = _mazeMap; m_mazeMap.drawMap(); m_mazeMap.detTerpoint(originPoint,destination); } mazePerson::~mazePerson() {// delete []m_iNowLocal;// m_iNowLocal = NULL;// delete []m_iPreviousLocal;// m_iPreviousLocal = NULL;}void mazePerson::setPersonPosition(int _row,int _col) { m_iNowLocal[0] = _row; m_iNowLocal[1] = _col; }void mazePerson::setPersonSpeed(Speed _speed) { m_Speed = _speed; }void mazePerson::setPersonShap(char _Person) { m_chPerson = _Person; } Faceto mazePerson::turn(Faceto _faceto)//基于右手算法,定義下一步往哪走{ m_Faceto = _faceto; if(m_Faceto==_up) { if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]+1))!=Wall)//先判斷右邊界 { m_Faceto = _right; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]-1) + m_iNowLocal[1]))!=Wall)//再判斷上邊界 { m_Faceto = _up; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]-1))!=Wall)//再判斷左邊界 { m_Faceto = _left; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]+1) + m_iNowLocal[1]))!=Wall)//再判斷下邊界 { m_Faceto = _left; } } else if(m_Faceto==_right) { if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]+1) + m_iNowLocal[1]))!=Wall)//先判斷下邊界 { m_Faceto = _down; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]+1))!=Wall)//再判斷右邊界 { m_Faceto = _right; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]-1) + m_iNowLocal[1]))!=Wall)//再判斷上邊界 { m_Faceto = _up; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]-1))!=Wall)//再判斷左邊界 { m_Faceto = _left; } } else if(m_Faceto==_down) { if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]-1))!=Wall)//先判斷左邊界 { m_Faceto = _down; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]+1) + m_iNowLocal[1]))!=Wall)//再判斷下邊界 { m_Faceto = _right; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]+1))!=Wall)//再判斷右邊界 { m_Faceto = _up; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]-1) + m_iNowLocal[1]))!=Wall)//再判斷上邊界 { m_Faceto = _up; } } else if(m_Faceto==_left) { if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[0]-1) + m_iNowLocal[1]))!=Wall)//先判斷上邊界 { m_Faceto = _up; } else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[0] + m_iNowLocal[1]-1))!=Wall)//再判斷左邊界 {
http://www.cnblogs.com/Yhcnblogs/p/7120385.html