寫在開始:這個(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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

#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;
}

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

以下是mazeMap.h

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

#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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

以下是mazeMap.cpp

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

#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;
}

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

 

以下是mazePerson.h

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

#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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

 

以下是mazePerson.cpp

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

#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