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这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
最新文章
- 大学教师辞职创业,已向高校捐赠超10亿元!多以个人名义……
- 日10亿级处理,基于云的微服务架构
- Xshell关闭导致jar服务终止,使Jar在CentOS后台运行
- codeforces626F
- 学计算机的女生是一种怎样的存在?
- mybatis入门(六)----高级映射(一对一,一对多,多对多)
- Oracle RAC 客户端连接负载均衡(Load Balance)
- c语言程序设计江宝钏第九章,C语言程序设计 (江宝钏 著) 清华大学出版社 第9章习题答案1...
- 如何使用 Linq 获取每个分组中的第一个元素?
- 建筑工程计算机实验室简介,计算机实验室简介
- 进程和线程的区别【转】
- 360手机卫士大数据驱动犯罪打击 配合警方破案成果显著
- App_Code 目录
- c语言 队列长度,c语言 队列
- win10前置耳机插孔没声音_win10录屏没声音解决方法「系统天地」
- JavaWeb 简单实现客户信息管理系统
- String 常用方法总结
- 学习C++程序设计需要什么基础
- 吉木萨尔县文化旅游策划案——天山圣地,武侠之都!
- linux打开chm文件,安装kchmviewer,在linux下查看chm文件