迷宫游戏就是玩家在地图中移动,移动至终点则游戏结束。

自己用文本文档手打了个小地图,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++实现迷宫游戏相关推荐

  1. 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)

    前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...

  2. c++ 迷宫思路_迷宫问题求解——C++

    迷宫问题思路 根据昨天的博客,有如下几种解决方案 克鲁斯卡尔 ,为避免死循环,需要设定优化路径的次数. Prim,为避免死循环,需要设定优化路径的次数,暂定200次. BFS , 实现简单,无死循环. ...

  3. java 迷宫最短路径_用Java实现迷宫最短路径算法

    单源最短路(Bellman - Ford算法) 宽度优先搜索 迷宫最短路径用宽度优先搜索(bfs)相比用深度优先搜索(dfs)的好处在于bfs每次计算都是最短路径不存在重复计算,而dfs每计算出一条可 ...

  4. python 迷宫边界_用Python绘制迷宫般的线条?

    Or you could try turtle. 下面是我在pythonturtle中实现的一个最简单的map follower.(不是迷宫跟随者,因为它不做任何回溯.)这可以让你大致了解如何使用数组 ...

  5. 星之卡比镜之迷宫机器人_星之卡比镜之迷宫下载

    星之卡比镜之迷宫中文版是星之卡比系列巅峰之作之一,是一款横版闯关游戏:星之卡比镜之迷宫是一款经典而又精彩的GBA版的任天堂的巨作:喜欢经典怀旧游戏的朋友可以到本站下载体验. 星之卡比镜之迷宫游戏简介: ...

  6. 星之卡比镜之迷宫机器人_星之卡比镜之迷宫中文版下载 星之卡比镜之迷宫单机游戏下载...

    游戏简介 <星之卡比镜之迷宫>是一款横版闯关游戏,形状似星星敦厚卡比由于外形可爱而被众多女性和低龄玩家喜欢,卡比在游戏中拥有吸收敌人并能获得对手能力的超能力,游戏中可以变化攻击的手段繁多, ...

  7. python可视化迷宫求解_如何用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  8. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频

    递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例.本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径. 01 用递归算法解决迷宫问题 迷宫问题在<数据结构教程 ...

  9. java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画

    前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...

最新文章

  1. Unity从零开始构建能力体系 Unity Ability System
  2. 复习计算机网络基础 day9--应用层
  3. 【转载】并发数据结构
  4. 检查电脑是否被安装***的三个小命令
  5. Linux安装Kibana
  6. JavaScript 中的常用12种循环遍历(数组或对象)的方法
  7. 在Silverlight 2应用程序中集成Virtual Earth
  8. grunt安装与运行
  9. 物联网核心安全系列——物联网安全需求
  10. 5 thinkpad 黑将评测_ThinkPad L380视频评测:全能型商务助手
  11. 直插电阻的分类和区别
  12. 驱动精灵等软件卸载后剩余文件的删除
  13. App保持登录状态的常用方法
  14. FFmpeg视频录制(WIN)
  15. iOS-音频 + 视频
  16. EditPlus使用技巧集
  17. 智能语义搜索引擎:一站式检索服务、打通数据壁垒、充分挖掘数据价值 | 百万人学AI评选
  18. QT Desinger设计程序主界面 PyUIC生成.py
  19. 多个excel快速合并到一个excel的多个sheet
  20. 软件架构设计最佳实践(课程大纲)

热门文章

  1. java程序 下载电影_用java实现的电影天堂,飘花电影网的电影的下载地址抓取
  2. [附源码]JAVA+ssm计算机毕业设计Sketch2Mod网站(程序+Lw)
  3. 【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)
  4. 敏捷开发和瀑布流开发
  5. oracle报错00801,PLS-00801: Type xxxxxx has no MAP method 这到底是啥啊……
  6. 终于可以上网啦^_^
  7. 魅蓝2 android os,魅蓝note2的原生android系统刷机包
  8. 中国量子信息化传输获突破(非隐形传输)
  9. 2015年IT业薪酬展望:开发、技术支持、项目经理……
  10. 把数字转换为人民币大写(用于银行系统)