程序员必看视频之-基于原则的发明( 三 )


问题是 , 我不希望玩家能够在这里站起来 。 我希望玩家从海龟身上弹开 , 然后穿过这里的小通道 。 而且他将必须四处走走 , 解决难题和诸如此类的问题 , 然后再回来获得新星 。 因此 , 乌龟现在太有弹性了 。 当然 , 现在我可以拒绝使用代码 , 现在可以尝试了 , 但现在还不够弹性 。 因此 , 虽然可以在运行时调整代码而不必停止并重新编译并再次找到我的位置 , 这是很好的 , 但我无法立即看到我需要看到的内容 , 这就是他是否可以进行跳转 。
所以这就是我要做的 。 我要跳出乌龟 , 然后暂停游戏 。 所以我暂停了游戏 , 现在这里有一个滑块 , 可以让我时光倒流 。 现在 , 我可以在进行跳转之前倒退 , 并更改代码 , 使其不那么有弹性 , 现在当我将其向前移动时 , 它将使用相同的输入控件 , 与记录的相同键盘命令进行模拟之前 , 但是带有新代码 。
这还不够好 。 我需要能够立即看到更改 。 我需要能够立即查看我的跳动是否正确 。 这些东西都没有 。 而且 , 如果您有一个及时的流程 , 并且希望立即看到更改 , 则必须将时间映射到空间 。 所以这就是我要做的 。 我要弹起乌龟 , 暂停游戏 , 现在点击这里的按钮 , 显示我的足迹 。 现在 , 我可以看到他去过的地方 。 当我倒带时 , 在他面前的这条路就是他要去的地方 。 这是他的未来 。 当我更改代码时 , 我也会更改他的未来 。 这样我就可以准确地找到所需的价值 , 因此当我击打比赛时 , 他就滑到了那里 。
因此 , 创作者需要能够看到他们在做什么 。 如果您要设计嵌入时间的东西 , 则需要能够控制时间 。 您需要能够跨时间查看 , 否则您将设计盲目 。
当我玩这个游戏时 , 我注意到用重力玩很有趣 。 因此 , 我可以使重力稍微为负 , 然后他开始飘浮在空中 。 我可以和他一起玩 , 并尝试让他留在那里 。 您可能只需要围绕机械手进行整个游戏 , 这就是重力操纵 。 实际上 , 我敢打赌我可以摆弄这段代码的任何部分 , 并提出游戏的想法 。 即使我只注释掉代码中的第一条语句 , 现在我的家伙也不能向左移动-他只能向右移动 。 这听起来有些愚蠢 , 但是Terry Cavanagh实际上围绕着“不要回头”这个概念做了一个漂亮的游戏 。 特里·卡瓦纳(Terry Cavanagh) , 他制作了另一款非常出色的游戏 , 您可能会看到它叫做“ VVVVVV” , 六次拼写为字母v 。 而且 , 游戏的运作方式是您无法跳跃 。 取而代之的是 , 您只能上下颠倒 , 然后跌倒而不是跌倒 。 所以有点像这样 。 您可以在天花板上走动 , 也可以在地面上走动 。 因此 , 您拥有这些看起来像这样的级别 , 并且您到处走来走去……您必须学习如何在这样的地形上导航 。 因此 , 如果您有一个类似的东西 , 您将无法跳过它 。 您将不得不翻身;他从这个概念中获得了惊人的游戏玩法 。
同样 , 能够尝试您想到的想法 。 这个例子以及最后一个带有树的例子 , 都是非常直观的程序 。 我们仅通过查看图片的变化就能看到我们的更改 。 所以我在想 , 我们如何才能做更多符合该原则的抽象编码 。 我们如何以一种可以看到自己正在做什么的方式编写通用算法 。 举个例子 , 让我们看一下二进制搜索 。 关于二进制搜索工作原理的超级快速复习:您有一个按顺序排列的值数组 , 并且有一个键 , 这是您要在数组中查找的值 。 然后 , 您将跟踪两个变量 , 它们是您认为该值可能存在的上限和下限 。 现在 , 它可能在任何地方 。 而且您看起来正处于该范围的中间–如果发现的范围太小 , 则关键必须在此之后 。 查看范围的中间 , 如果发现太大 , 则必须在此之前 。 并且您会不断细分范围 , 直到您缩小要寻找的值 。 在代码中 , 二进制搜索看起来像这样 。 从我的角度来看 , 您在这里看不到任何东西 。 你什么都看不到 。 我看到的是“数组”一词 , 但实际上看不到数组 。 因此 , 为了编写这样的代码 , 您必须在脑海中想象一个数组 , 并且实际上必须玩计算机 。 您必须在脑海中模拟每行代码在计算机上将执行的操作 。 在很大程度上 , 我们认为是熟练的软件工程师的人员仅仅是真正善于玩计算机的人员 。 但是 , 如果我们要在计算机上编写代码……为什么要模拟计算机在脑子里会做什么?为什么计算机不只是这样做……并向我们展示?
程序员必看视频之-基于原则的发明文章插图
所以 。 让我们编写二进制搜索 。“二进制搜索”功能需要一个键和一个数组 。 然后在这边说 , “好吧 , 它需要一个键和一个数组 , 例如什么?给我一个例子;我需要一些与之合作的东西 。 ”因此 , 例如 , 我的数组可能是“ a” , “ b” , “ c” , “ d” , “ e” , “ f” 。 假设我们正在寻找“ d” 。 现在开始编码 。 下限开始为零 。 在这里说“低等于零” , 这没什么好奇怪的 。 上限从数组的末尾开始 , 因此上限等于数组长度减去一 。 在这里 , 它说“高等于五” 。 所以我在代码中有我的抽象公式 。 在这里 , 它为我提供了与这些示例参数相对应的具体值 。 因此 , 我不必将这张照片保持在脑海中 。 它只是向我展示 。