结构:整个模拟都是一个无Flutter的Dart文件(约810行,32个单元测试),控件层仅从一个Ticker驱动它,因此物理完全可以通过无UI测试。
免费地提供地形:不再手动绘制18个洞的几何形状,绿色是杯子周围的圆形,公平是从球杆到杯子线上的胶囊(点到段距离),杂草是其他所有东西。每个球击球时都根据滚动摩擦力和击球力进行缩放,因此一个函数可以为每个洞提供地形。
界外不需要愤怒的退出:在移动设备上,打击和距离界外处罚感觉很糟糕。相反,内部墙壁保持活跃的0.82恢复(银行射击保持技巧),但外部边界降低到0.45,公平是狭窄的中心走廊—所以向外喷射它只会使球球死了并将其留在杂草中。没有界外处罚打击,但有战略成本。
值得分享的bug:我从纯滚动公式中导出每个球杆的最大距离。一个单元测试失败:铁球旅行的距离比驱动器更远。结果,高仰角球杆以滚动代替起飞并在落地时损失能量,因此低仰角驱动器实际上更短—非单调的仰角。修复:为感觉保留每个球杆的功率乘数,但让硬距离限制成为唯一的天花板。测试在它发货之前就捕捉到了一个错误的感觉机制。
AI对手不能欺骗:它是相同引擎的第二个实例,玩相同的课程,受相同的物理、地形和球杆限制—没有单独的代码路径可以获得不公平的优势。
评论 (0)