我的世界 × 第一人称射击 —— 挖方块、建工事、守住一波波来袭的僵尸。
一个单文件网页游戏(index.html,约 900 行),零构建、零安装,打开就能玩。
🎮 在线试玩:https://oldcircle.github.io/blockfire/
僵尸波次制生存:每波 3 + 2×波数 只僵尸从世界边缘涌来,越来越多、越来越硬、越来越快。你有一把无限备弹的步枪,和一整个可以拆、可以搭的体素世界。
两个玩法的化学反应是核心乐趣:
- 子弹可以击碎方块 —— 打穿树干、轰塌土坡,射击就是你的镐子
- 僵尸爬不上超过 1.2 格的落差 —— 搭墙、挖沟、建高台是正经防守策略
- 脱战 5 秒后缓慢回血 —— 打一波、修一波工事,节奏自己掌握
- 爆头 2 倍伤害,击杀 +100 分,守住一波有波次奖励分
| 按键 | 动作 |
|---|---|
W A S D |
移动 |
空格 |
跳跃 |
Shift |
疾跑 |
鼠标左键 |
射击(可连发,子弹可击碎方块) |
鼠标右键 |
放置方块 |
1 – 4 |
切换方块:泥土 / 石头 / 木板 / 原木 |
R |
换弹 |
Esc |
暂停 |
需要一个静态服务器(Three.js 走 CDN + ES Module,直接双击 index.html 会被浏览器的模块加载策略拦住):
git clone https://github.com/Oldcircle/blockfire.git
cd blockfire
python3 -m http.server 8642
# 浏览器打开 http://localhost:8642全部逻辑在一个 index.html 里,唯一外部依赖是 CDN 上的 Three.js 0.160:
- 世界:64×64 程序生成体素地形(双频值噪声高度图 + 随机树木),
Map存方块数据 - 渲染:每种方块一个
InstancedMesh,只渲染有暴露面的方块,方块增删时整体重建 - 物理:分轴 AABB 碰撞(玩家 0.6×1.78),重力 + 跳跃 + 疾跑
- 射击:
Raycaster命中判定(僵尸与方块比距离取近者),曳光弹、后坐力、命中标记、枪口闪光 - 僵尸:盒子拼装的类 MC 造型,追踪 AI + 地面吸附 + 落差爬坡限制,每个部位可独立命中(头部双倍伤害)
- 音效:WebAudio 振荡器实时合成,无任何音频资源文件
- 特效:方块破碎粒子、受击红屏、走路摆枪/摆腿动画