7.游戏场景-地图结构体
7.1 知识点
class 语句块外 namespace 语句块内
创建地图类型
struct Map
{
}
格子类型数组
public Grid[] grids;
初始化地图构造函数
/// <summary>
/// 初始化地图构造函数中,初始了各个格子的类型和位置
/// </summary>
/// <param name="x">起始格子的 x 坐标</param>
/// <param name="y">起始格子的 y 坐标</param>
/// <param name="num">格子的数量</param>
public Map(int x, int y, int num)
{
}
给格子类型数组分配新房间
grids = new Grid[num];
创建随机和随机变量,用于随机创建不同类型的格子
Random r = new Random();
int randomNum;
创建用于位置改变计数的变量
// 表示 X 变化的次数
int indexX = 0;
// 表示 Y 变化的次数
int indexY = 0;
// x 的步长,可以用于反向
int stepNum = 2;
创建绘制格子的循环
for (int i = 0; i < num; i++)
{
}
设置随机变量
randomNum = r.Next(0, 101);
根据随机变量的值设置格子类型
// 有 85% 的几率是普通格子(首尾两个格子必为普通格子)
if (randomNum < 85 || i == 0 || i == num - 1)
{
grids[i].type = E_Grid_Type.Normal;
}
// 有 5% 的几率是炸弹
else if (randomNum >= 85 && randomNum < 90)
{
grids[i].type = E_Grid_Type.Boom;
}
// 有 5% 的几率是暂停
else if (randomNum >= 90 && randomNum < 95)
{
grids[i].type = E_Grid_Type.Pause;
}
// 有 5% 的几率是时空隧道
else
{
grids[i].type = E_Grid_Type.Tunnel;
}
根据位置改变计数的变量设置格子位置
// 给格子的位置创建新房间
grids[i].pos = new Vector2(x, y);
// 每次循环都应该按一定规则去变化位置
// 如果 X 的计数累加了 10 次
if (indexX == 10)
{
// 格子位置的 y 坐标就要加 1
y += 1;
// Y 的计数加 1
++indexY;
// 如果 Y 的计数累加了 2 次
if (indexY == 2)
{
// X 和 Y 的计数都清 0
indexX = 0;
indexY = 0;
// 反向步长,蛇形地图
stepNum = -stepNum;
}
}
// 如果 X 的计数没有累加 10 次
else
{
// 格子位置的 x 坐标就要加一个步长的值
x += stepNum;
// X 的计数加 1
++indexX;
}
class 语句块内 主函数外 游戏场景逻辑函数内
绘制地图
// 初始化一张地图
Map map = new Map(14, 3, 80);
// 调用地图的画方法
map.Draw();
7.2 知识点代码
class语句块外 namespace语句块内
//创建地图类型
struct Map
{
//格子类型数组
public Grid[] grids;
//初始化地图构造函数
/// <summary>
/// 初始化地图构造函数中 初始了 各个格子的 类型 和 位置
/// </summary>
/// <param name="x">其实格子的x坐标</param>
/// <param name="y">其实格子的y坐标</param>
/// <param name="num">格子的数量</param>
public Map(int x, int y, int num)
{
//给格子类型数组分配新房间
grids = new Grid[num];
//创建随机和随机变量 用于随机创建不同类型的格子
Random r = new Random();
int randomNum;
//创建用于位置改变计数的变量
//表示X变化的次数
int indexX = 0;
//表示Y变化的次数
int indexY = 0;
//x的步长 可以用于反向
int stepNum = 2;
//创建绘制格子的循环
for (int i = 0; i < num; i++)
{
//设置随机变量
randomNum = r.Next(0, 101);
//根据随机变量的值 设置格子类型
//有85%几率 是普通普通格子(首尾两个格子 必为普通格子)
if (randomNum < 85 || i == 0 || i == num - 1)
{
grids[i].type = E_Grid_Type.Normal;
}
//有5%的几率 是炸弹
else if (randomNum >= 85 && randomNum < 90)
{
grids[i].type = E_Grid_Type.Boom;
}
//有5%的几率 是暂停
else if (randomNum >= 90 && randomNum < 95)
{
grids[i].type = E_Grid_Type.Pause;
}
//有5%的几率 是时空隧道
else
{
grids[i].type = E_Grid_Type.Tunnel;
}
//根据位置改变计数的变量 设置格子位置
//给格子的位置创建新房间
grids[i].pos = new Vector2(x, y);
//每次循环都应该按一定规则去变化位置
//如果X的计数累加了10次
if (indexX == 10)
{
//格子位置的y坐标就要加1
y += 1;
//Y的计数加1
++indexY;
//如果Y的计数累加了2次
if (indexY == 2)
{
//X和Y的计数都清0
indexX = 0;
indexY = 0;
//反向步长 蛇形地图
stepNum = -stepNum;
}
}
//如果X的计数没有累加10次
else
{
//格子位置的x坐标就要加一个步长的值
x += stepNum;
//X的计数加1
++indexX;
}
}
}
public void Draw()
{
for (int i = 0; i < grids.Length; i++)
{
grids[i].Draw();
}
}
}
class语句块内 主函数外 游戏场景逻辑函数内
//绘制地图
//初始化一张地图
Map map = new Map(14, 3, 80);
//调用地图的画方法
map.Draw();
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com