我的第一篇博文:C++最初的路-经典的小游戏走迷宫
写在开始:这个博客建于大二下学期。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++最初的路-经典的小游戏走迷宫的更多相关文章
- 程序员小张的第一篇博文 --记Markdown的使用学习
1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ...
- 第一篇博文:PHP函数原型中的可选参数写法为什么这么写?
第一篇,算是开始吧.简单写点儿东西. 刚开始学PHP,在看PHP Manual时遇到一个问题:含可选参数的函数原型中,可选参数的写法看不懂. 例如explode函数 array explode ( s ...
- .Net小白的第一篇博文
说起来也比较惭愧,5个月之前,我早已创建了博客园账号,那时候的我雄心壮志,给自己定下了 很多目标.现在回想起来,除了体重的增长,头发的稀疏,似乎这段时间的消逝并没有带给我什么见识上的成长.哈哈,想必大 ...
- 第一篇博文,整理一下关于Mac下安装本地LNMP环境的一些坑
安装的主要步骤是按照以下这篇文章进行的http://blog.csdn.net/w670328683/article/details/50628629,但是依然遇到了一些大大小小的坑(一个环境搞了一天 ...
- 我的第一篇博文,Python+scrapy框架安装。
自己用Python脚本写爬虫有一段时日了,也抓了不少网页,有的网页信息两多,一个脚本用exe跑了两个多月,数据还在进行中.但是总觉得这样抓效率有点低,问题也是多多的,很早就知道了这个框架好用,今天终于 ...
- 终于成为博客员的一员了,这是我的第一篇博文,写一个关于ul li内容宽度的问题和解决方案
第一次写博文,写一个刚才遇到的问题吧. 关于ul li文字长度不固定,一行显示多列.当指定宽度时,文字长度超过指定的li宽度时解决方案: 如下代码 <h4>发送对象(共10个会员)< ...
- 我的第一篇博文,开启我的Java程序人生之旅!
原文:https://blog.csdn.net/CodeYearn/article/details/89190342 自我介绍: 姓名:蔡余 性别:男 年龄:21 职业:Java开发工程师 家乡:湖 ...
- Dsyy的第一篇博文~
2017-08-07 周一 晴热热热热热 咳咳,很多人看到dsyy第一反应是什么意思?当然是大神媛媛!显然不是些(diao)(si)yy.(da)(si)yy...的别义,咋有点此地无银三百两的感 ...
- struts2 在 Action 或 Interceptor 中获取 web.xml 中配置的 <context-param> 参数 (这是我的第一篇博文,哈哈。)
最近为了改一个问题,想加一个控制开关,就在web.xml 中配置了一个 <context-param> 参数,并在 Action 或 Interceptor 中获取参数值. 1.在 web ...
随机推荐
- Samba文件共享服务
Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS ...
- vue-router 中router-view不能渲染
最近在做一个vue的项目,其中使用了vue2.0,vue-router2.0.在使用vue-router的时候跳了一个很大的坑,router-view不能渲染,花费了好多时间终于发现了原因. 项目目录 ...
- SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7
当前表出于 装入暂挂状态,使用重组命令(reorg) 不起作用,报SQL-104, 然后从网上百度了大量解除 DB2暂挂的命令均不好使,最后采用了对表的runstats单个优化,也是类似reorg的单 ...
- 在eclipse-jee-juno中配置Aptana对jQuery代码自动提示
主要问题 在Aptana的Web Project中打开js文件有JavaScript的自动提示,但是在JavaEE项目中却没有. 版本 eclipse-jee-juno,即Eclipse 4.2的Ja ...
- rownum基本用法
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀. ...
- 开源解析库 - JSON
Json及其实现 JSON作为一种轻量级的数据交换格式,多被用于跨语言通信(比如CPP与PHP之间的数据交互). 至于何为JSON,其详细解释参考 官网. 既然是一种格式,那便必然有相应的编码实现.在 ...
- poj2976(01分数规划)
poj2976 题意 给出 a b 数组,一共 n 对数,其中最多可以去掉 k 对,问怎样使剩下比率(原始比率是 $ \frac{\sum_{i=1}^{n} a}{\sum_{i=1}^{n} b} ...
- Vivado简单调试技能
Vivado简单调试技能 1.关于VIO核的使用 首先配置VIO核: 配置输入输出口的数量5,5 配置输入口的位宽 配置输出口位宽和初始值. 例化与使用: vio_0 U1 ( .clk(clk_27 ...
- Android布局方式
1. LinearLayout(线性布局) android:orientation="vertical" android:layout_width="wra ...
- python不使用第三方变量,交换两个变量的值
#不使用第三个变量交换两个变量的值 a=1 b=2 a,b=b,a#python的直接交换 #另一种交换方法 a=a+b#a=3 b=2 b=a-b#a=3 b=1 a=a-b#a=2 b=1 pri ...