【游戏功能】
抢凳子的规则只有一句:音乐一停,抢到的坐,没抢到的走。全部的紧张感来自一个不对称——人比凳子多一个。今天拆抢凳子的表现,看"永远差一个"的数学怎么变成满场尖叫。
一、绕圈、扑凳、淘汰三段循环
抢凳子的循环三段。绕圈段:四名玩家围着三只凳子转圈,转速恒定、间距均匀——转圈的匀速是暴风雨前的平静,音乐一停立刻变天。扑凳段:音乐停的瞬间全员扑向最近的空凳,抢到的坐下、没抢到的原地呆立画红叉——扑凳的一瞬间是全员博弈,抢到同一只凳的以先到者胜。淘汰段:没凳的出局退到圈外,凳子减一只,剩余人继续绕圈——凳子一轮比一轮少,最后一轮两人抢一凳,冠军加冕。三段的核心张力是"永远差一个":只要凳子比人少一个,抢就永远不会停。
完整演示在这,点音乐停:
fx-chairs
二、幂尔框架实现:扑凳锁位与淘汰退场
扑凳用"先到先锁定"判定,淘汰者退场标记:
local MusicalChairs = {}
local KEY = { RUSH_SPD = 260 }
local guests, chairs = {}, {}
local round = 0
function MC.Knock()
if SL:GetValue("phase") ~= "circle" then return end
SL:SetValue("phase", "rush")
SL:PlaySfx("music_stop")
-- 全员锁定最近空凳: 先到先得
for _, g in ipairs(guests) do
if g.alive then
local best, bd = nil, 1e9
for _, c in ipairs(chairs) do
if not c.taken then
local d = math.sqrt((c.x - g.x) ^ 2 + (c.y - g.y) ^ 2)
if d < bd then bd = d; best = c end
end
end
if best then
g.targetX, g.targetY = best.x, best.y
best.taken = true -- 凳子预锁定
else
g.out = true -- 没抢到凳的out
end
end
end
end
function MC.Tick(dt)
if SL:GetValue("phase") ~= "rush" then return end
local settled, alive = 0, 0
for _, g in ipairs(guests) do
if g.alive then
alive = alive + 1
if g.out or g.seated then
if g.out then settled = settled + 1 end
else
local dx = g.targetX - g.x
local dy = g.targetY - g.y
local d = math.sqrt(dx * dx + dy * dy)
if d < 6 then
g.seated = true
settled = settled + 1
else
g.x = g.x + dx / d * KEY.RUSH_SPD * dt
g.y = g.y + dy / d * KEY.RUSH_SPD * dt
end
end
end
end
if settled >= alive then
MC.Eliminate()
end
end
function MC.Eliminate()
for _, g in ipairs(guests) do
if g.alive and g.out then
g.alive = false
SL:PlayFxAt("player_out", g.x, g.y)
end
end
round = round + 1
local alive = 0
for _, g in ipairs(guests) do if g.alive then alive = alive + 1 end end
if alive <= 1 then
SL:ShowSystemTips("冠军诞生!")
SL:SetValue("phase", "over")
else
SL:ScheduleOnce(function()
MC.Rebuild()
SL:SetValue("phase", "circle")
end, 1.2)
end
end
return MC
凳子预锁定那行是公平核心:冲刺前凳子就"认了主",冲刺只是走个过程——避免两人同时到同凳的判死难题。
三、凳数递减与红叉退场
凳数递减的节奏是全场的心跳:四人三凳、三人二凳、二人一凳——最后一轮的扑凳是全场的决赛,两个红叉只有一个能幸免。出局玩家的红叉标记要保留到本轮结束:他还要看着别人坐他的凳子——出局不消失,出局只是坐不了。凳子的预锁定提示用颜色微变:被锁的凳子泛金光——观众看金光就知道哪只凳有主了,抢凳的悬念变成"他能不能跑到"。最后,冠军的加冕用最后一凳的金光常亮表达:不用皇冠不用礼花,他坐着的那只凳子亮着,全场就都知道谁是赢家。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 围住一只怪的贪心人人都有:三面堵死一只不漏——可围三阙一的规矩偏偏唱反调:围三面留一口,怪只会往那口里钻——口…
【游戏功能】 元素搭配的老话是水火不容,可战场上的说法得倒过来念:水是雷的引信。引水的机制是一场两步的合谋:先泼一瓢水把地泼…
【游戏功能】 低血大怪的回血机制人人见过,可血珠的回血藏着一手"要你去抢"的心机:它每掉两成血就吐一颗血珠在地上,两秒内不踩…
【游戏功能】 隐形怪人人都遇到过,可现身的机制比隐形狠:它钻进影子里消失,一秒后从你脚下画的影圈里钻出来,背刺三十四点——影…
【游戏功能】 有人纳闷:大怪危机预警里最气人的一档是什么?不是它放大招,是它开阵——法阵一转,转满三秒蹦出两只小狼,好好的单…
【游戏功能】 if chg <= 0.8 then lock = true ——一行把"锁定"写进蓄力里的判定,道破了蓄力炮…