写在开始:这个博客建于大二下学期。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. LeetCode---------Add Two Numbers 解法

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  2. Hadoop2.6.1中的Reducer实现

    正在考虑怎么方便上传图片 1.Partitioner其是一个抽象类,只有一个抽象方法.其作用是对Reducer产生的中间结果进行分片,以方便将同一分组的数据交给同一个Reducer处理 2.类的继承结 ...

  3. 解决ubuntu的gedit显示中文乱码问题

    http://www.cnblogs.com/zhcncn/p/4032321.html

  4. struts2.1.6教程四、OGNL与ValueStack(VS)

    1.值栈入门 下面我们建立struts2ognl项目来练习ognl的使用. 步骤一.搭建strust2的开发环境 步骤二.建立LoginAction,主要代码如下: package com.asm; ...

  5. BAYESIAN STATISTICS AND CLINICAL TRIAL CONCLUSIONS: WHY THE OPTIMSE STUDY SHOULD BE CONSIDERED POSITIVE(转)

    Statistical approaches to randomised controlled trial analysis The statistical approach used in the ...

  6. Http状态码大全(来自菜鸟教程)

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基于TCP/IP通信 ...

  7. SQL写操作 设置内容 (数组转字符串)

    SQL写操作 设置内容 (数组转字符串) SQL set内容 SQL操作数组转字符串 SQL写操作 set内容 (数组转字符串) [ 封装方法 ] function getSqlSet( $data ...

  8. Zepto源码分析-ajax模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  9. 作为前端,我为什么选择 Angular 2?

    转自:https://sanwen8.cn/p/2226GkX.html 没有选择是痛苦的,有太多的选择却更加痛苦.而后者正是目前前端领域的真实写照.新的框架层出不穷:它难吗?它写得快吗?可维护性怎样 ...

  10. Java经典编程题50道之三十六

    有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数. public class Example36 {    public static void main(String[] a ...