没有合适的资源?快使用搜索试试~ 我知道了~
首页C++实现随机生成迷宫地牢
资源详情
资源评论
资源推荐

C++实现随机生成迷宫地牢实现随机生成迷宫地牢
主要介绍了C++实现随机生成迷宫地牢的相关资料及代码分享,推荐给大家,有需要的小伙伴可以参考下。
可以用这个地图核心做成一个无限迷宫类的游戏
main.cpp
// Author: FreeKnight 2014-09-02
#include "stdafx.h"
#include <iostream>
#include <string>
#include <random>
#include <cassert>
/*
简单逻辑流程描述:
将整个地图填满土
在地图中间挖一个房间出来
选中某一房间(如果有多个的话)的墙壁
确定要修建某种新元素
查看从选中的墙延伸出去是否有足够的空间承载新的元素
如果有的话继续,不然就返回第 3 步
从选中的墙处增加新的元素
返回第 3 步,直到地牢建设完成
在地图的随机点上安排上楼和下楼的楼梯
最后,放进去怪兽和物品
*/
//-------------------------------------------------------------------------------
// 暂时支持的最大的地图块个数
#define MAX_TILES_NUM 10000
// 房间的大小
#define MAX_ROOM_WIDTH 8
#define MAX_ROOM_HEIGHT 8
#define MIN_ROOM_WIDTH 4
#define MIN_ROOM_HEIGHT 4
// 房间和走廊的合计最大个数
#define DEFAULT_FEATURE_NUM 1000
// 尝试生成房间和走廊的测试次数(即步长)
#define MAX_TRY_TIMES 1000
// 默认创建房间的概率(100-该值则为创建走廊的概率)
#define DEFAULT_CREATE_ROOM_CHANCE 70
// 走廊长度
#define MIN_CORRIDOR_LEN 3
#define MAX_CORRIDOR_LEN 6
//-------------------------------------------------------------------------------
// 格子块
enum class Tile
{
Unused, // 没用的格子(土块)
DirtWall, // 墙壁
DirtFloor, // 房间地板
Corridor, // 走廊
Door, // 房门
UpStairs, // 入口
DownStairs // 出口
};
//-------------------------------------------------------------------------------
// 朝向
enum class Direction
{
North, // 北
South, // 南
East, // 东
West, // 西
};
//-------------------------------------------------------------------------------
class Map
{
public:
Map():
xSize(0), ySize(0),
data() { }
// 构造函数,全屏填土
Map(int x, int y, Tile value = Tile::Unused):
xSize(x), ySize(y),
data(x * y, value) { }
// 填充某块类型
void SetCell(int x, int y, Tile celltype)
{
assert(IsXInBounds(x));
assert(IsYInBounds(y));
data[x + xSize * y] = celltype;
}
// 获取某块类型
Tile GetCell(int x, int y) const
{
assert(IsXInBounds(x));
assert(IsYInBounds(y));
return data[x + xSize * y];
}
// 设置一块区域为指定类型块
void SetCells(int xStart, int yStart, int xEnd, int yEnd, Tile cellType)
{
assert(IsXInBounds(xStart) && IsXInBounds(xEnd));
assert(IsYInBounds(yStart) && IsYInBounds(yEnd));

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0