6-5 防止河流逆流

  在之前的章节中,我们创建了添加、移除河流的方法。但是我们忽略了一点,就是河流不能从低处往高处流,也就是河流逆流的情况。当我们编辑地图单元的高度的时候,我们需要判断其中的河流是否会发生逆流的情况,如果有的话,就要移除这些逆流的河流。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public int Elevation
{
get
{
return elevation;
}
set
{



//当前有河流从cell流出,如果流出cell高度小于相邻流入cell高度,这就是河流的逆流,移除流出河流
if (hasOutgoingRiver && elevation < GetNeighbor(outgoingRiver).elevation)
{
RemoveOutgoingRiver();
}
//与流出判断相类似,当流入cell高度大于流出cell高度时,也是逆流的情况
if (hasIncomingRiver && elevation > GetNeighbor(incomingRiver).elevation)
{
RemoveIncomingRiver();
}

Refresh();
}
}

  这样,在编辑地图单元高度的时候,就可以防止河流出现逆流的情况了。在下一章中,我们要创建编辑河流的UI部分,为最后时限拖拽鼠标创建河流做准备。

Github代码