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

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

热门文章

  1. java之输出某一年的万年历
  2. Java 9中--add-exports和--add-opens有什么区别?
  3. 考研那些事——那些年,我们一起度过的猪狗不如的生活
  4. 认购与申购的区别是什么
  5. 动态代理——拦截器——责任链——AOP面向切面编程底层原理详解(迪丽热巴版)
  6. 【ZT】凡客诚品CPS广告付费模式研究
  7. 在北京做产品经理3年可以拿到多少薪资
  8. ANSYS apdl命令流笔记11------载荷(F命令)与约束(D命令)的区别
  9. 计算机网络基础这门课重要吗,计算机网络基础课程改革论文
  10. 400 名微软员工曝光薪资:4 万美元到 32 万美元不等!