写在开始:这个博客建于大二下学期。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. 写给Android App开发人员看的Android底层知识(4)

    (八)App内部的页面跳转 在介绍完App的启动流程后,我们发现,其实就是启动一个App的首页. 接下来我们看App内部页面的跳转. 从ActivityA跳转到ActivityB,其实可以把Activ ...

  2. 用SIM900上传云端数据(原创KEKE)

    依次发送如下几个命令到SIM900A模块:   AT+CGCLASS="B" AT+CGDCONT=1,"IP","CMNET" AT+CG ...

  3. (转)Amoeba for MySQL 非常好用的mysql集群软件

    Amoeba for MySQL Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy ...

  4. 029 hibernate抓取策略

    实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...

  5. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

  6. 纯css实现多标签浮动居中(任意个数)

    在做的一个网页上有一块要用浮动标签,具体就是网页底部有未知数量,未知尺寸的元素要水平居中,有点类似于分页器. 首先,我们先新建一个容器con,就是标签的爸爸,用来控制标签在页面的位置,.father{ ...

  7. Spring component-scan 的逻辑 、单例模式下多实例问题、事务失效

    原创内容,转发请保留:http://www.cnblogs.com/iceJava/p/6930118.html,谢谢 之前遇到该问题,今天查看了下 spring 4.x 的代码 一,先理解下 con ...

  8. Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开

    最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开, 而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方 ...

  9. 解析PHP面向对象的三大特征

    class BenHang extends Card{ /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){ parent ...

  10. [0] 错误1“GenerateResource”任务意外失败。....

    解决方案1:关闭VS,删除目录下DEBUG文件夹下所有文件,打开VS重新编译.