一、生成随机方块

代码分析:

1.block_name[] group;

声明一个数组,其元素类型为 block_name。这个数组将用于存储不同类型的方块名称。

2.if (Random.Range(0, 1f) < rate_range1) group = func_block_gorup;
else if (Random.Range(0, 1f) < rate_range2) group = feat_block_gorup;
else group = easy_block_gorup;

随机选着方块,这里使用 Random.Range(0, 1f) 生成一个随机浮点数,并与预定义的两个概率阈值 rate_range1 和 rate_range2 进行比较。根据不同的概率范围,选择不同的方块组分配给 group 变量。

3.使用 Random.Range(0, 1f)的注意事项

Random 是 Unity 引擎中用于生成伪随机数的类。伪随机数是由算法生成的,看似是随机的,但是实际上是可复现的。

Random.Range 是 Random 类中的一个方法,用于生成指定范围内的随机数。

在 Random.Range(0, 1f) 中,第一个参数是范围的下限,而第二个参数是范围的上限。

这个方法生成的随机数可以包含0,但不包含1。

4.最后在从选定的方块组中随机选择方块

return name2block(group[Random.Range(0, group.Length)]);

其中Random.Range(0, group.Length) 用来生成一个随机索引,然后通过 group 数组获取相应的 block_name。然后通过 name2block 方法得到相应的Block 对象并返回。

二、将游戏中的方块转换成字符串进行保存

优点:便于存储、传输或在需要时重新加载。

代码分析:

首先声明字符串变量 string data = ""; 用于存储方块数据的字符串表示。

for (int x = 1; x <= W; ++x)
    for (int y = 1; y <= H; ++y)
        if (block[x, y]) data += block[x, y].package_save() + ";";
这里遍历的整个游戏区域,其中的W 和 H 表示游戏场景的宽度和高度。

如果有方块,就调用 block[x, y].package_save() 方法来获取方块的字符串表示,然后将其添加到 data 字符串后,同时在每个方块数据之间加上分号 (;)。

其中packge_save() 用于返回方块数据的字符串表示。

三、多态性

定义:指的是同一个操作在不同的对象上能够具有不同的行为。多态性允许使用同样的接口或方法来操作不同类型的对象,而不需要关心对象的具体类型,从而提高了代码的灵活性和可扩展性。

两个关键字

Virtual 关键字用于声明一个方法、属性或索引器是可以在派生类中被重写的。它在基类中定义了一个默认实现,但允许派生类提供新的实现。

Override 关键字用于明确表示派生类中的方法是对基类中的虚拟方法进行重写。它在派生类中提供了新的实现,覆盖了基类中的默认实现。

示例:


假设有一个基类 Animal,其中有一个 MakeSound 方法,表示动物发出的声音。我们希望在派生类中能够提供不同动物的声音实现。

派生类 Dog

派生类 Cat

派生类 Dog 和 Cat 分别重写了基类方法(使用 override 关键字,用于明确表示在派生类中正在对基类中的虚拟方法进行重写。),提供了不同的声音实现。

最后,在 Main 方法中,通过基类引用分别创建了 Dog 和 Cat 对象。由于 MakeSound 方法是虚拟的,它们在运行时会调用正确的重写方法,实现了多态性。

更多推荐