课程入口

课程内容总结:生肖投注系统开发(第二部分)
1. 最大值限制与边界处理
- 问题发现:未处理投注最大值30的限制,缺少
break
语句。
- 解决方案:
2. 图标资源导入与界面调整
- 资源导入:
- 从客户端缓存中提取十二生肖图标(
rings_ui
),复制到项目目录。
- 动态加载未缓存资源:通过
require
加载新资源,无需重启客户端。
- 界面布局:
- 添加图标容器(如
e
层),调整坐标(X=3338 → 修正为X=22)。
- 图片路径检查:确认服务端与客户端路径一致(如
RES/range2S
)。
3. 锁定/解锁功能实现
- 逻辑设计:
- 锁定条件:
- 全局限制:投注阶段(倒计时>170秒)不可锁定。
- 本地限制:未投注时(总值=0)不可锁定。
- 状态管理:
- 初始化变量(如
$lock_state
)标记锁定状态。
- 按钮动态显示:根据条件切换“锁定”/“解锁”文本及颜色(如灰色禁用)。
- 倒计时同步:
- 投注倒计时(150秒)与锁定倒计时(170秒)分离计算。
- 界面实时刷新:通过倒计时变量更新按钮状态。
4. 投注与解锁逻辑
- 投注流程:
- 校验:检查投注总值>0,否则提示“未投注”。
- 扣费:扣除对应元宝(需检测余额是否充足)。
- 存储:将投注数据存入键值对(如
T10[1..12]
)。
- 清理:清空临时变量(如
n
数组)。
- 解锁流程:
- 校验:检查
T10
非空,否则跳过。
- 返还:返还元宝(按存储的总额)。
- 重置:清空
T10
及界面数值。
5. 安全性注意事项
- 封包攻击防护:
- 关键操作(如投注)需严格校验:数值范围、资源扣除、状态同步。
- 避免直接
goto
跳转:所有逻辑需通过条件判断(如if money >= total then
)。
- 数据可信性:
- 总额计算在服务端完成,客户端仅作显示。
- 解锁时返还金额需与投注时扣除金额一致。
6. 代码优化与调试
- 循环简化:
- 调试技巧:
- 打印中间变量(如
print(T10)
)验证数据流转。
- 界面元素坐标微调:通过像素级偏移(如X±1)快速定位。
7. 作业与预告
- 实践任务:
- 独立实现锁定/解锁全流程,确保倒计时与状态同步。
- 尝试优化循环结构(如用
pairs
遍历键值对)。
- 下节课内容:
- 转盘动画实现:使用Lua动态生成旋转效果,结合TXT定时器控制显隐。
关键代码片段示例
-- 锁定按钮状态更新
if current_time > 170 then
$lock_state = "已锁定"
$button_color = "gray"
else
$lock_state = "锁定"
$button_color = "white"
end
-- 投注校验与存储
local total = 0
for i = 1, 12 do
total = total + n[i]
end
if total <= 0 then
sendMsg("未投注!")
else
MOV T10, n -- 存储投注数据
money = money - total -- 扣费
end