这是一个基于 **Three.js** (渲染) 和 **Cannon-es** (物理引擎) 的单文件 HTML 3D 台球游戏。 ### 游戏特色: 1. **混沌物理**:每进一球,物理规则重置。 2. **操作方式**: * **按住鼠标左键** 并在屏幕上拖动来蓄力(会出现瞄准线)。 * **松开鼠标** 击球(白球)。 * **旋转视角**:按住鼠标右键拖动。 3. **包含规则**: * **重力反转**:球会飞向天花板(天花板有隐形碰撞体)。 * **台面倾斜**:重力方向改变,球会自动滚向一边。 * **尺寸错乱**:所有球的大小随机缩放(物理碰撞体也会变)。 * **隐形迷宫**:台面上随机生成看不见的障碍物。 ### 代码文件 你可以直接将以下代码保存为 `.html` 文件并在浏览器中打开。 ```html 混沌台球:规则随你变
当前规则:标准物理
已进球: 0
左键拖拽击球 | 右键旋转视角
``` ### 玩法说明: 1. **初始化**:游戏开始时是标准的物理规则。 2. **击球**: * 将鼠标移动到白球上,**按住鼠标左键**。 * 像拉弹弓一样向后拖动鼠标(会出现一条白线指示击球方向和力度)。 * **松开左键** 发射白球。 3. **触发混乱**: * 只要有**彩色球**掉出台面(因为没有做复杂的球袋模型,只要球掉落到台面下方即视为进球),屏幕上方的规则提示就会改变。 * **Gravity Invert (重力反转)**:球会全部飘起来,贴在隐形的天花板上。你需要在这个状态下尝试击球(虽然很难控制)。 * **Tilt (倾斜)**:台面会向左或向右倾斜,球会自动滚动,你需要预判偏移量。 * **Random Size (尺寸错乱)**:有的球变大,有的变小,物理碰撞体积也会随之改变,导致击球线路完全不可预测。 * **Invisible Walls (隐形障碍)**:台面上会出现几个看不见的立方体,球碰到空气会反弹。 ### 技术实现细节: * **单文件结构**:所有 CSS、HTML 和 JS (ES Modules) 都在一个文件中,通过 CDN 动态加载 Three.js 和 Cannon-es。 * **物理同步**:每一帧 `world.step` 后,将 Cannon body 的位置和旋转复制给 Three.js 的 Mesh。 * **状态管理**:`triggerRandomRule` 函数负责清理上一轮的混乱状态(如删除隐形墙、重置重力),然后应用新的随机规则。 * **简化碰撞**:为了保证单文件代码简洁,没有使用复杂的 CSG 挖洞,而是通过检测球的 Y 坐标是否低于阈值来判定"进球"。