写在开始:这个博客建于大二下学期。2年多的学习,从网上借鉴的大牛经验,代码,指导数不胜数,而其中大部分来自别人的博客,于是期待有一天也能把自己在学习过程中的一些经验拿出来与大家分享。后来大概觉得离大牛太远,就没敢再奢望指导别人,反而希望有大牛能偶尔看到,给予指导,也算不负初衷。

其实我凝望了C++已经快2年了,也没见它回望于我。标题叫新手村的复活点,大概是因为在开始的地方就一直被小问题打倒吧。

下面是最近两天写的一个小程序,算是对C++的一个小小的复习,这个小游戏已经拖了半年,已经忘记了当时写它的初衷。

以下是main.cpp

#include <iostream>
#include <windows.h>
#include <string>
#include "mazeMap.h"
#include "mazePerson.h" using namespace std; int main()
{
int Map[][] = {//要求地图入口在最下面,出口在最右面
{,,,,,,,},//map[0][0:7]
{,,,,,,,},//map[1][0:7]
{,,,,,,,},//map[2][0:7]
{,,,,,,,},//map[3][0:7]
{,,,,,,,},//map[4][0:7]
{,,,,,,,},//map[5][0:7]
{,,,,,,,},//map[6][0:7]
{,,,,,,,} //map[7][0:7]
};
mazeMap map1;
map1.setmazeMap((int **)Map,,);//传入地图数组参数
map1.setmazeWall('*');//设置墙的样式
mazePerson People(map1);
Faceto faceto;
faceto = _up;
People.setPersonSpeed(MID);//设置移动速度
People.setPersonShap('T');//设置人物样式
People.start(faceto);
return ;
}

以下是mazeMap.h

#ifndef MAZEMAP_H_INCLUDED
#define MAZEMAP_H_INCLUDED
#include <string>
const bool Wall(); 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[];
int m_iTerpoint[];
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 = ;
m_iRow = ;
m_iOriginpoint[] = ;
m_iOriginpoint[] = ;
m_iTerpoint[] = ;
m_iTerpoint[] = ;
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[] = _mazeMap.m_iOriginpoint[];
m_iOriginpoint[] = _mazeMap.m_iOriginpoint[];
m_iTerpoint[] = _mazeMap.m_iTerpoint[];
m_iTerpoint[] = _mazeMap.m_iTerpoint[];
} mazeMap::~mazeMap()
{
for (int i = ;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 = ;
int j = m_iRow-;
for (i = ;i<m_iCol;i++)//出口在最右边一列
{
if((*(m_mazeArr + m_iCol*i +j))!=Wall)
{
m_iTerpoint[] = i;
m_iTerpoint[] = j;
}
}
i = m_iCol-;
for (j = ;j<m_iRow;j++)
{
if((*(m_mazeArr + m_iCol*i +j))!=Wall)
{
m_iOriginpoint[] = i;
m_iOriginpoint[] = j;
}
}
destination[] = m_iTerpoint[];
destination[] = m_iTerpoint[];
originPoint[] = m_iOriginpoint[];
originPoint[] = m_iOriginpoint[]; } void mazeMap::drawMap()
{
for (int i = ;i < m_iCol;i++)
{
for (int j = ;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[];
int m_iPreviousLocal[];
int destination[] = {,};
int originPoint[] = {,};
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[] = ;//行
m_iNowLocal[] = ;//列
m_iPreviousLocal[] = ;
m_iPreviousLocal[] = ;
mazeMap m_mazeMap;
} mazePerson::mazePerson(mazeMap _mazeMap)
{
m_chPerson = 'Y';
m_Faceto = _up;
m_Speed = LOW;
m_iNowLocal[] = ;//coord X
m_iNowLocal[] = ;//coord Y
m_iPreviousLocal[] = ;
m_iPreviousLocal[] = ;
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[] = _row;
m_iNowLocal[] = _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[] + m_iNowLocal[]+))!=Wall)//先判断右边界
{
m_Faceto = _right;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]-) + m_iNowLocal[]))!=Wall)//再判断上边界
{
m_Faceto = _up;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]-))!=Wall)//再判断左边界
{
m_Faceto = _left;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]+) + m_iNowLocal[]))!=Wall)//再判断下边界
{
m_Faceto = _left;
}
}
else if(m_Faceto==_right)
{
if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]+) + m_iNowLocal[]))!=Wall)//先判断下边界
{
m_Faceto = _down;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]+))!=Wall)//再判断右边界
{
m_Faceto = _right;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]-) + m_iNowLocal[]))!=Wall)//再判断上边界
{
m_Faceto = _up;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]-))!=Wall)//再判断左边界
{
m_Faceto = _left;
}
}
else if(m_Faceto==_down)
{
if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]-))!=Wall)//先判断左边界
{
m_Faceto = _down;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]+) + m_iNowLocal[]))!=Wall)//再判断下边界
{
m_Faceto = _right;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]+))!=Wall)//再判断右边界
{
m_Faceto = _up;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]-) + m_iNowLocal[]))!=Wall)//再判断上边界
{
m_Faceto = _up;
}
}
else if(m_Faceto==_left)
{
if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]-) + m_iNowLocal[]))!=Wall)//先判断上边界
{
m_Faceto = _up;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]-))!=Wall)//再判断左边界
{
m_Faceto = _left;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*(m_iNowLocal[]+) + m_iNowLocal[]))!=Wall)//再判断下边界
{
m_Faceto = _down;
}
else if((*(m_mazeMap.getArradd() + m_mazeMap.getCol()*m_iNowLocal[] + m_iNowLocal[]+))!=Wall)//再判断右边界
{
m_Faceto = _up;
}
} return m_Faceto;
} void mazePerson::start(Faceto _faceto)
{
char tempchPer = 'Y';
tempchPer = m_chPerson;
m_iNowLocal[]=originPoint[];
m_iNowLocal[]=originPoint[];
int speed_num = ;
if(m_Speed == LOW)
{
speed_num = ;
}
else if(m_Speed == MID)
{
speed_num = ;
}
else if(m_Speed == FAST)
{
speed_num = 0.5;
}
m_Faceto = _faceto;
//画第一个点的位置
m_iPreviousLocal[] = m_iNowLocal[];
m_iPreviousLocal[] = m_iNowLocal[];
setPersonShap(' ');
gotoyx(m_iPreviousLocal[],m_iPreviousLocal[]);
_sleep(0.05*);//delay 0.1s
setPersonShap(tempchPer);
gotoyx(m_iNowLocal[],m_iNowLocal[]);
_sleep(speed_num*);//delay 1s
while()
{
m_iPreviousLocal[] = m_iNowLocal[];
m_iPreviousLocal[] = m_iNowLocal[];
switch(m_Faceto)
{
case ://_up
{
m_iNowLocal[]=m_iNowLocal[]-;
break;
}
case ://_down
{
m_iNowLocal[]=m_iNowLocal[]+;
break;
}
case ://_left
{
m_iNowLocal[]=m_iNowLocal[]-;
break;
}
case ://_right
{
m_iNowLocal[]=m_iNowLocal[]+;
break;
}
} if((m_iNowLocal[]==destination[])&&(m_iNowLocal[]==destination[]))
{
setPersonShap(' ');
gotoyx(m_iPreviousLocal[],m_iPreviousLocal[]);
_sleep(0.1*);//delay 0.1s
setPersonShap(tempchPer);
gotoyx(m_iNowLocal[],m_iNowLocal[]);
_sleep(speed_num*);//delay 1s
break;
}
m_Faceto = turn(m_Faceto);
setPersonShap(' ');
gotoyx(m_iPreviousLocal[],m_iPreviousLocal[]);
_sleep(0.1*);//delay 1s
setPersonShap(tempchPer);
gotoyx(m_iNowLocal[],m_iNowLocal[]);
_sleep(speed_num*);//delay 1s
}
setPersonShap(' ');
gotoyx(,m_mazeMap.getROw());
cout<<endl;
cout<<"Finally reach terminal point!"<<endl;
} void mazePerson::gotoyx(int _row,int _col)
{
COORD cd;
cd.X = _row;
cd.Y = _col;
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle,cd);
cout<<m_chPerson;
}

代码经过验证,运行截图如下

我的第一篇博文:C++最初的路-经典的小游戏走迷宫的更多相关文章

  1. 程序员小张的第一篇博文 --记Markdown的使用学习

    1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ...

  2. 第一篇博文:PHP函数原型中的可选参数写法为什么这么写?

    第一篇,算是开始吧.简单写点儿东西. 刚开始学PHP,在看PHP Manual时遇到一个问题:含可选参数的函数原型中,可选参数的写法看不懂. 例如explode函数 array explode ( s ...

  3. .Net小白的第一篇博文

    说起来也比较惭愧,5个月之前,我早已创建了博客园账号,那时候的我雄心壮志,给自己定下了 很多目标.现在回想起来,除了体重的增长,头发的稀疏,似乎这段时间的消逝并没有带给我什么见识上的成长.哈哈,想必大 ...

  4. 第一篇博文,整理一下关于Mac下安装本地LNMP环境的一些坑

    安装的主要步骤是按照以下这篇文章进行的http://blog.csdn.net/w670328683/article/details/50628629,但是依然遇到了一些大大小小的坑(一个环境搞了一天 ...

  5. 我的第一篇博文,Python+scrapy框架安装。

    自己用Python脚本写爬虫有一段时日了,也抓了不少网页,有的网页信息两多,一个脚本用exe跑了两个多月,数据还在进行中.但是总觉得这样抓效率有点低,问题也是多多的,很早就知道了这个框架好用,今天终于 ...

  6. 终于成为博客员的一员了,这是我的第一篇博文,写一个关于ul li内容宽度的问题和解决方案

    第一次写博文,写一个刚才遇到的问题吧. 关于ul li文字长度不固定,一行显示多列.当指定宽度时,文字长度超过指定的li宽度时解决方案: 如下代码 <h4>发送对象(共10个会员)< ...

  7. 我的第一篇博文,开启我的Java程序人生之旅!

    原文:https://blog.csdn.net/CodeYearn/article/details/89190342 自我介绍: 姓名:蔡余 性别:男 年龄:21 职业:Java开发工程师 家乡:湖 ...

  8. Dsyy的第一篇博文~

    2017-08-07  周一  晴热热热热热 咳咳,很多人看到dsyy第一反应是什么意思?当然是大神媛媛!显然不是些(diao)(si)yy.(da)(si)yy...的别义,咋有点此地无银三百两的感 ...

  9. struts2 在 Action 或 Interceptor 中获取 web.xml 中配置的 <context-param> 参数 (这是我的第一篇博文,哈哈。)

    最近为了改一个问题,想加一个控制开关,就在web.xml 中配置了一个 <context-param> 参数,并在 Action 或 Interceptor 中获取参数值. 1.在 web ...

随机推荐

  1. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  2. 微信小程序开发之获取openid及用户信息

    1. 获取openid 1.1 获取code 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的会话密钥(session_key).用户数据的加解 ...

  3. vue-cli+webpack在生成的项目中使用bootstrap

    在也个html页面中加入bootstrap是很方便,就是一般的将css和js文件通过Link和Script标签就行. 那么在一个用vue-vli生成的前端项目中如何加入?因为框架不一样了,略微要适应一 ...

  4. Yii2.0中场景的使用小记

    熟悉Yii框架的人都知道,灵活的使用场景可以达到事半功倍的效果! 比如普通的数据的新增.修改,新增需要验证其中两个字段,而修改只需要验证其中一个字段:还有种情况,也是我们现在用到的,同一张表(同一个m ...

  5. Java数据库连接错误集

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after co ...

  6. Python+requests库 POST接口图片上传

    捕获到POST接口的请求参数,如下: 包括data.file两个部分,上传代码如下: 比较简单,直接发送files参数即可 heads中 content-type 折腾了1个小时,呵呵

  7. 如何在require中使用VUE

    现在网上抄的沸沸扬扬的VUE看来是个很NB的东西啊,看了一下,确实相对于angular1来说简化了不少东西,性能方面也比angular1要好很多,所以现在用的人越来越多了,于是作为前端,学习一下新东西 ...

  8. PHP面试题详解

    自己从网上找了几份常考到的PHP面试题进行了整理,然后才有了这份PHP面试题,并且我把所有的题目进行了详细分析和代码分析,希望可以对大家有帮助,谢谢大家. 这份试题我也上传到了百度云,有需要的可以直接 ...

  9. 我们为什么要使用AOP?

    原文地址http://www.cnblogs.com/xrq730/p/7003082.html,转载请注明出处,谢谢 前言 一年半前写了一篇文章Spring3:AOP,是当时学习如何使用Spring ...

  10. ecshop获取商品销量函数

    以下函数会获取订单状态为已完成的订单中该商品的销量,此函数放在lib_goods.php文件中即可调用 /** * 获取商品销量 * * @access      public * @param    ...