先弄懂小球怎么动
这个打砖块只有一颗球,前进方向始终是横向3px、纵向3px的组合。碰到墙、砖块或挡板时,只会翻转其中一个方向的符号,速度不变, 所以轨迹永远是45度斜线。无论打在挡板中间还是边缘,弹回的角度都一样,球也不会越来越快。 因此在这个游戏里,挡板操作的重点不是"制造角度",而是"提前判断球会落在哪里,并站到那里"。 画面是480×400的画布,游戏每秒固定更新60次,不管显示器刷新率是多少,速度都一致。
从代码读出的物理数值
| 项目 | 数值 |
|---|---|
| 小球每帧移动距离 | 横向3px、纵向3px(斜向约4.24px) |
| 每秒移动距离 | 每个轴180px,斜向约255px |
| 键盘控制挡板速度 | 5px/帧 = 每秒300px |
| 挡板从一端到另一端(键盘) | 80帧 = 1.33秒 |
| 小球在左右墙之间横穿一次 | 156帧 = 2.60秒 |
| 从挡板高度升到天花板 | 约125帧 = 2.08秒 |
| 小球横穿挡板宽度(80px) | 约26.7帧 |
键盘挡板速度(每秒300px)比小球的横向速度(每秒180px)快,所以只用键盘也总能追上落点。 鼠标和触屏则会让挡板中心立刻移到指针位置,没有速度限制。挡板在画面两端会停住,不会移出画面。
砖块布局与到达时间
砖块共8列×5行,一共40块,每块1分,满分40分。打中一次就消失,没有多次才能击碎的砖块,也没有道具。 单块砖为52×18px,间隔4px,整体宽度444px,从左侧18px排到右侧462px,两侧留白相等。 下表是小球从挡板弹出后到达每一行底边所需的时间(以球心计算,假设不碰墙直线前进)。
| 自上而下 | 颜色 | 纵向范围(px) | 到达帧数 | 到达时间(秒) |
|---|---|---|---|---|
| 第1行 | 红 | 40 ~ 58 | 108 | 1.79 |
| 第2行 | 橙 | 62 ~ 80 | 100 | 1.67 |
| 第3行 | 黄 | 84 ~ 102 | 93 | 1.54 |
| 第4行 | 绿 | 106 ~ 124 | 86 | 1.42 |
| 第5行 | 蓝 | 128 ~ 146 | 78 | 1.30 |
碰撞判定只用球心,而不是半径6px的圆。球心进入砖块矩形内才算击中,所以看起来球像是稍微擦进砖角再弹开。 挡板也一样:球心必须落在挡板的80px宽度内才算接住,即使球只是勉强压在挡板边缘,只要球心在外面就算漏接。
判定规则整理
- 击中砖块时,砖块消失,分数加1。如果球在上一步位置处于砖块左右范围之外,就视为撞到侧面,翻转横向;在范围之内则翻转纵向。同一帧碰到多块砖,方向也只翻转一次。
- 左右墙和天花板会翻转对应方向。底部不是墙,而是一个洞。
- 球到达挡板高度时,如果球心在挡板宽度内,就向上弹回并发出音效;否则继续下落,碰到底部的瞬间失去一次机会。
- 机会共3次。失去一次后,球会从画面下方中央重新出发,朝右上方飞去,挡板也回到中间。已打掉的砖块不会恢复。
- 打碎全部砖块即获胜,机会用完则失败。游戏不保存最高分,也不会在浏览器中留下任何数据。
- 点击暂停按钮或按 P 键可暂停,标签页被遮住时游戏也不会前进。游戏进行中按方向键不会滚动页面。
用例子验证攻略
- 反应时间计算。打中最下面一行(第5行)后返回的球,回到挡板所用的时间与上升时间1.30秒大致相同。 最快一个来回约2.6秒,这段时间里球横向要移动约468px,你必须接住它。
- 键盘能不能追上。同样一个来回中,键盘挡板最多可移动780px,比球的横向位移更宽裕(碰墙反弹后位移还会更短),所以只用键盘也防得住。
- 得分构成。满分是5行×8列=40分,每一行分值相同。上面的行并不更值钱,所以先从下方的行打起风险更小。
实战策略
- 球只沿45度方向运动,把几次墙面反弹连起来想,就能预测落点。可以把墙"展开"来算:当作球不转弯直线飞行,再把横向走过的距离按球心可活动的宽度468px为周期折叠回来,就得到实际位置。
- 把某一列一路打通到顶部后,球会跑到砖块上方的空地,暂时不会回来。这段时间可以顺着天花板和墙壁的反射路径,提前把挡板移到位。
- 在球到达挡板高度之前,先把挡板中心对准落点。只要球心落在挡板宽度内就行,对准中间的话左右各有40px的余量。
- 失去机会后,球总是从中央朝右上方出发,所以第一次反弹的方向每次都相同。
- 最后剩一两块砖留在角落时会很耗时。根据剩余砖块的位置算出球来的方向,把挡板预先偏向一侧会更有利。
常见失误与局限
- 鼠标移出画布后,挡板会停在最后的位置,请让指针保持在画布内。
- 键盘和鼠标同时使用时,后一次输入会覆盖挡板位置,建议统一用一种方式。
- 用挡板边缘击球也不会改变角度,所以经典打砖块里"用边缘制造角度"的技巧在这里不适用。
- 没有关卡、加速、道具和多球,获胜后游戏就结束了。
- 游戏不使用随机数。相同的操作总是产生相同的轨迹。
打砖块的起源
打砖块这一类型因1976年雅达利(Atari)推出的街机游戏《Breakout》而广为人知。挡板、小球和砖块这种简单的组合,后来衍生出无数变体和仿作。本页的游戏是对原版的简化呈现。
常见问题
可以在手机上玩吗?
可以。用手指触摸画布并左右拖动,挡板就会跟着移动。画布上已禁止页面滚动,需要滚动时请在画布之外操作。
小球的速度会越来越快吗?
不会。小球从头到尾保持相同速度(每个轴每帧3px),打碎再多砖块也不会变快。
球打在挡板的不同位置,弹回方向会不同吗?
不会。只有纵向方向翻转,横向速度保持不变,所以无论打在哪个位置角度都一样。决定方向的只是球原来的飞行方向。
怎么暂停?
点击暂停按钮或按 P 键即可暂停,再按一次继续。切换到其他标签页时,游戏时间不会流逝。
分数或记录会保存吗?
不会。分数只显示在画面上,刷新后重新开始,也不会在浏览器中保存任何数据。