Python从零模仿我的世界(六)

模型类

现在我来详细讲讲check_neighbours函数。这个函数长这个样子:

class Model:
    ...
    def check_neighbours(self, position):
        x, y, z = position
        # 依次检测上下前后左右的方块是否需要显示
        for dx, dy, dz in Settings.faces:
            key = (x + dx, y + dy, z + dz)
            # 如果方块不存在,那么当然不用显示了
            if key not in self.world:
                continue
            # 这里的情况和 add_block 中一样
            # 只有露了面的方块才需要显示
            if self.exposed(key):
                # 如果没有被显示过,才需要显示
                # shown 字典的作用讲到 show_block hide_block 时再细说
                if key not in self.shown:
                    self.show_block(key)
            else:
                # 这里也是
                if key in self.shown:
                    self.hide_block(key)

这个check_neighbours函数是用来做什么的呢?别急,让我们来考虑两种情况:

  • 第一种,我在一大片平整的、厚度大于2层的方块上放置了一个方块。不用说,我刚刚放下去的方块肯定是要显示的,但是我放的方块下面压着的那个方块到底要不要显示呢?在我放之前,肯定是要的。因为就算它的下面有方块、前后左右都有方块,但是上面是没有的。而在我放了之后,这个被压着的方块的上面就多出来了一个新方块,这时满足6个面都被方块包围,是不用显示的。
  • 第二种,这次是一大片平整的、厚度大于3层的方块,我从顶层挖掉了一个方块。这时,被我挖掉的方块的下面的那个方块要显示吗?在我挖方块之前,肯定是不用的。因为它处于第二层中,上下都被包围、前后左右也都有方块。但是在我挖了之后,这个方块的上面就暴露了出来,这时就要显示了。

这种显示与不显示的变动只会存在于添加或删除的方块的相邻方块中,所以在add_blockremove_block函数中要调用check_neighbours检查相邻方块。

这篇文章代码少,解说的内容多,特别是check_neighbours函数的调用场景,各位可以好好体会一下。顺便,点个赞再走吧~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值