/////////////////////////////////////////////////// ////// cls_youle_erqiwang_config: 房间配置解析 ////// /////////////////////////////////////////////////// // // roomtype 采用定长数字位串(字符串),每一位对应一个开关,'0'/'1',方便前端逐项勾选: // 位0 局数: '0'→6局 '1'→12局 // 位1 扣卡方式: '0'→房主扣卡 '1'→AA每人扣卡 // 位2 傍王: '0'→关 '1'→开 // 位3 爬坡: '0'→常规算子 '1'→爬坡 // 位4 查牌: '0'→可查牌 '1'→不查牌 // 示例 "10100" = 12局 / 房主扣卡 / 傍王开 / 常规算子 / 可查牌 // 缺省 "00000" = 6局 / 房主扣卡 / 无傍王 / 常规算子 / 可查牌(对齐 design 缺省) // // 本模块是 roomtype 位串格式的唯一解析入口(SSOT);游戏逻辑一律经 parse() 读取, // 不得在别处按下标硬解析。 // var cls_youle_erqiwang_config = cls_youle_erqiwang_config || { //位索引常量 IDX_ASET: 0, //局数 IDX_DEDUCT: 1, //扣卡方式 IDX_BANGWANG:2, //傍王 IDX_CLIMB: 3, //爬坡 IDX_NOCHECK: 4, //查牌 //取第 idx 位是否为 '1';roomtype 缺失/过短一律按 '0'(缺省)处理 bit: function(roomtype, idx){ if (!roomtype || typeof roomtype != "string"){ return false; } if (idx < 0 || idx >= roomtype.length){ return false; } return roomtype.charAt(idx) == "1"; }, //解析 roomtype 位串为具名配置对象 parse: function(roomtype){ var cfg = {}; cfg.aset12 = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_ASET); //true=12局 false=6局 cfg.deductAA = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_DEDUCT); //true=AA每人 false=房主 cfg.bangwang = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_BANGWANG);//true=开傍王 cfg.climb = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_CLIMB); //true=爬坡 cfg.nocheck = cls_youle_erqiwang_config.bit(roomtype, cls_youle_erqiwang_config.IDX_NOCHECK); //true=不查牌 return cfg; } } //Node(本地/单元测试)导出;友乐/浏览器无 module 时跳过,按全局名引用(dev-guide 01 §1) if (typeof module !== "undefined"){ module.exports = cls_youle_erqiwang_config; }