结构:整个模拟都是一个Flutter-free Dart文件(~810行,32个单元测试),控件层仅由一个Ticker驱动,因此物理完全可测试,且无UI。
地形免费:不再手动为18个洞进行几何设计,绿地是杯子周围的圆形,公平线是从球杆→杯子的线上(点到线段距离),杂草是其他所有东西。每个球杆都根据滚动摩擦和打击力缩放,一个函数就可以为每个洞提供地形。
无界限但无愤怒:在移动设备上,击球和距离的界限罚款感觉很糟糕。相反,内部墙壁保持活跃的0.82反弹(银行球仍然是一种技能),但外部边界降低到0.45,公平线是一个狭窄的中间走廊——所以 sprayed 它们宽泛地就使球球死了并把它留在杂草中。没有界限的战略成本,但没有罚球。
值得分享的错误:我从纯滚动公式中推导出每个球杆的最大距离。一项单元测试失败:铁球飞行的距离超过了驱动器。结果是凸起球杆以获得升力而牺牲滚动并在着陆时损失能量,因此低凸起的驱动器实际上飞行得更短——非单调与凸起。修复:保留每个球杆的感觉力,但让硬距离限制成为唯一的上限。测试捕捉到感觉不正确的机制之前就发货了。
AI对手无法作弊:它是一个相同引擎的第二个实例,玩相同的课程,受相同的物理、地形和球杆限制——没有单独的代码路径可以获得不公平的优势。
评论 (0)