c++ 迷宫思路_使用C++实现迷宫游戏
迷宫游戏就是玩家在地图中移动,移动至终点则游戏结束。
自己用文本文档手打了个小地图,0表示空白,1表示墙,文件名随意,我改成了map.MapData。然后程序里定义一个全局变量char Map[MapLenX][MapLenY];(长宽自定义)行为X,列为Y。定义char型常量RoadSymbol = '0', WallSymbol = '1', PlayerSymbol = '+'。
本游戏为面向对象编写的,所以就要设计一个类。数据需要一个坐标和一个bool型储存是否到达终点。所以自定义了个结构体储存坐标
struct point
{
int x, y;
};
还需要构造函数,析构函数,然后写个移动的函数PlayerMove(),再写个判断是否到达终点的函数CheckIfWin()。每走完一步就要刷新屏幕,所以还需要写个函数Refresh(),然后PlayerActor类就完成了。
class PlayerActor
{
public:
point m_Location;
bool m_IfWin;
PlayerActor();
~PlayerActor();
void PlayerMove(int _Direc);
void Refresh(void);
void CheckIfWin(void);
};
构造函数析构函数先不着急, 先定义一下PlayerMove()。思路是先判断是否可移动。若能,当前位置的地图标记设为RoadSymbol, 移动即更新坐标,新坐标位置在地图上标记为PlayerSymbol, 刷新画面,判断输赢。Refresh()思路为先用system("cls")清屏,然后逐行打印。若地图上某点为RoadSymbol输出空格, WallSymbol输出'*', PlayerSymbol输出'+'。
接下来定义玩家起始位置和终点PlayerStart和PlayerEnd并初始化。main函数大体流程如下:读入地图,实例化PlayerActor,当!m_IfWin时接收键盘按键来移动,当m_IfWIn时弹出提示框并结束。所以还需要一个全局函数PlayerControl来接收按键并调用PlayerMove()。
至此,构造函数的流程也明确了。初始化m_IfWin和m_Location,在地图上表明玩家位置和重点位置,刷新屏幕,没了。然后再把能定义为常量的都定位常量,修改一下细节,就能得到一个简陋的走迷宫游戏了。
#include
#include
#include"conio.h"
#include"windows.h"
/
struct point
{
int x, y;
};
///
const point PlayerStart = {10, 2};
const point PlayerEnd = {2, 10};
const int MapLenX = 11, MapLenY = 10;
const char EndSymbol = '#', PlayerSymbol = '+', WallSymbol = '1', RoadSymbol = '0';
char Map[MapLenX][MapLenY];
const int MoveX[4] = {-1, 1, 0, 0}, MoveY[4] = {0, 0, -1, 1}; UP, DOWN, LEFT, RIGHT
const int _UP = 0, _DOWN = 1, _LEFT = 2, _RIGHT = 3;
/ CLASS ///
class PlayerActor
{
public:
point m_Location;
bool m_IfWin;
PlayerActor();
~PlayerActor();
void PlayerMove(int _Direc);
void Refresh(void);
void CheckIfWin(void);
};
/// MEMBER FUNCTIONS /
PlayerActor::PlayerActor()
{
m_IfWin = false;
this-> m_Location.x = PlayerStart.x;
this-> m_Location.y = PlayerStart.y;
Map[this-> m_Location.x][this-> m_Location.y] = PlayerSymbol;
Map[PlayerEnd.x][PlayerEnd.y] = EndSymbol;
PlayerActor::Refresh();
}
PlayerActor::~PlayerActor()
{
}
void PlayerActor::PlayerMove(int _Direct)
{
if ( Map[this-> m_Location.x+MoveX[_Direct]][this-> m_Location.y+MoveY[_Direct]] == RoadSymbol
|| Map[this-> m_Location.x+MoveX[_Direct]][this-> m_Location.y+MoveY[_Direct]] == EndSymbol )/// JUDGE IF CAN MOVE
{
Map[this-> m_Location.x][this-> m_Location.y] = RoadSymbol;
this-> m_Location.x += MoveX[_Direct];
this-> m_Location.y += MoveY[_Direct];
Map[this-> m_Location.x][this-> m_Location.y] = PlayerSymbol;
PlayerActor::Refresh();
PlayerActor::CheckIfWin();
}
}
void PlayerActor::Refresh(void)
{
system("cls"); //CLEAR SCREEN
for (int i=1; i<=MapLenX; i++)
{
for (int j=1; j<=MapLenY; j++)
{
if (Map[i][j] == RoadSymbol)
printf(" ");
else if (Map[i][j] == WallSymbol)
printf("* ");
else if (Map[i][j] == '+')
printf("%c ", PlayerSymbol);
else if (Map[i][j] == EndSymbol)
printf("%c ",EndSymbol);
}
printf("\n");
}
}
void PlayerActor::CheckIfWin(void)
{
if (this-> m_Location.x == PlayerEnd.x && this-> m_Location.y == PlayerEnd.y)
m_IfWin = true;
}
/ GLOBAL FUNCTION
void PlayerControl(PlayerActor* Player, int _KEY)
{
switch (_KEY)
{
case 119 : Player->PlayerMove(_UP); w 119
break;
case 115 : Player->PlayerMove(_DOWN); ///s 115
break;
case 97 : Player->PlayerMove(_LEFT); a 97
break;
case 100 : Player->PlayerMove(_RIGHT); d 100
break;
default:
break;
}
}
MAIN FUNCTION ///
int main()
{
/ READ MAP /
freopen("map.MapData", "r", stdin);
for (int i=1; i<=MapLenX; i++)
{
for (int j=1; j<=MapLenY; j++)
{
std::cin >> Map[i][j];
}
}
CREATE PLAYERACTOR
PlayerActor* Player = new PlayerActor;
while (!Player->m_IfWin)
{
PlayerControl(Player, _getch());
}
system("cls");
MessageBox(NULL, "You Win!", "Congratulations!", MB_OK);
delete Player;
return 0;
}
地图map.MapData:
1111111111
1000000001
1011111111
1010000001
1011111101
1000000101
1111110101
1000010101
1011110101
1000000001
1111111111
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: 使用C++实现迷宫游戏
本文地址: http://www.cppcns.com/ruanjian/c/303574.html
c++ 迷宫思路_使用C++实现迷宫游戏相关推荐
- 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)
前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...
- c++ 迷宫思路_迷宫问题求解——C++
迷宫问题思路 根据昨天的博客,有如下几种解决方案 克鲁斯卡尔 ,为避免死循环,需要设定优化路径的次数. Prim,为避免死循环,需要设定优化路径的次数,暂定200次. BFS , 实现简单,无死循环. ...
- java 迷宫最短路径_用Java实现迷宫最短路径算法
单源最短路(Bellman - Ford算法) 宽度优先搜索 迷宫最短路径用宽度优先搜索(bfs)相比用深度优先搜索(dfs)的好处在于bfs每次计算都是最短路径不存在重复计算,而dfs每计算出一条可 ...
- python 迷宫边界_用Python绘制迷宫般的线条?
Or you could try turtle. 下面是我在pythonturtle中实现的一个最简单的map follower.(不是迷宫跟随者,因为它不做任何回溯.)这可以让你大致了解如何使用数组 ...
- 星之卡比镜之迷宫机器人_星之卡比镜之迷宫下载
星之卡比镜之迷宫中文版是星之卡比系列巅峰之作之一,是一款横版闯关游戏:星之卡比镜之迷宫是一款经典而又精彩的GBA版的任天堂的巨作:喜欢经典怀旧游戏的朋友可以到本站下载体验. 星之卡比镜之迷宫游戏简介: ...
- 星之卡比镜之迷宫机器人_星之卡比镜之迷宫中文版下载 星之卡比镜之迷宫单机游戏下载...
游戏简介 <星之卡比镜之迷宫>是一款横版闯关游戏,形状似星星敦厚卡比由于外形可爱而被众多女性和低龄玩家喜欢,卡比在游戏中拥有吸收敌人并能获得对手能力的超能力,游戏中可以变化攻击的手段繁多, ...
- python可视化迷宫求解_如何用 Python 制作一个迷宫游戏
相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...
- java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频
递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例.本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径. 01 用递归算法解决迷宫问题 迷宫问题在<数据结构教程 ...
- java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
最新文章
- Unity从零开始构建能力体系 Unity Ability System
- 复习计算机网络基础 day9--应用层
- 【转载】并发数据结构
- 检查电脑是否被安装***的三个小命令
- Linux安装Kibana
- JavaScript 中的常用12种循环遍历(数组或对象)的方法
- 在Silverlight 2应用程序中集成Virtual Earth
- grunt安装与运行
- 物联网核心安全系列——物联网安全需求
- 5 thinkpad 黑将评测_ThinkPad L380视频评测:全能型商务助手
- 直插电阻的分类和区别
- 驱动精灵等软件卸载后剩余文件的删除
- App保持登录状态的常用方法
- FFmpeg视频录制(WIN)
- iOS-音频 + 视频
- EditPlus使用技巧集
- 智能语义搜索引擎:一站式检索服务、打通数据壁垒、充分挖掘数据价值 | 百万人学AI评选
- QT Desinger设计程序主界面 PyUIC生成.py
- 多个excel快速合并到一个excel的多个sheet
- 软件架构设计最佳实践(课程大纲)
热门文章
- java程序 下载电影_用java实现的电影天堂,飘花电影网的电影的下载地址抓取
- [附源码]JAVA+ssm计算机毕业设计Sketch2Mod网站(程序+Lw)
- 【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)
- 敏捷开发和瀑布流开发
- oracle报错00801,PLS-00801: Type xxxxxx has no MAP method 这到底是啥啊……
- 终于可以上网啦^_^
- 魅蓝2 android os,魅蓝note2的原生android系统刷机包
- 中国量子信息化传输获突破(非隐形传输)
- 2015年IT业薪酬展望:开发、技术支持、项目经理……
- 把数字转换为人民币大写(用于银行系统)