richardgong 发表于 2022-5-11 12:50:39

在mudlet中实现汉字数字转阿拉伯数字-参考‘白驼初见‘卖鱼

首先声明,以下代码是从mush代码修改来的,不是原创,参考于本论坛作品:MUSH边用边学(抛砖引玉系列) ------- 白驼初见
https://www.pkuxkx.net/forum/forum.php?mod=viewthread&tid=42818&fromuid=24096
(出处: 北大侠客行MUD论坛)



初用mudlet发现,有些mush代码不能直接移植过来,特别是我作为新手,在学习入门经典教材白驼初见时,完全没看懂卖鱼环节关于汉字数字正常转阿拉伯数字的原理,
mudlet的入门比mush相对简单,我就在原作基础上,把新手卖鱼环节数字转换代码翻新,将string.sub改为utf8.sub,汉字按3字节计算后代码终于能够在mudlet上运行了。
1.以下是trigger的部分截图:
!(https://api.mud.ren/storage/uploads/2022/05/11/bce29a4ba98301c76b631ac57216a21c.png)
2.中文mudlet的资料不多,虽然是新人,还是为mudlet的后来者做些贡献,以下是修改后的代码,各位见笑了:
```lua------------测试utf8.sub环节---------------------------------
--print("\n例子---------一百八十九---")
--                                    unit grade node                                    
--print("\n"..utf8.sub(CHN,5,5)) --九---9
--print("\n"..utf8.sub(CHN,4,4)) --十---10
--print("\n"..utf8.sub(CHN,3,3)) --八---8
--print("\n"..utf8.sub(CHN,2,2)) --百---100
--print("\n"..utf8.sub(CHN,1,1)) --一---1
--print("例子-----------")

------------测试结束分隔线---------------------------------
------------代码正式部分--------------------

CHN =matches
CHNum_tbl ={ ["一"] = 1,["二"] = 2,["三"] = 3,["四"] = 4,["五"] = 5,["六"] = 6,["七"] = 7,["八"] = 8,["九"] = 9}

if (#CHN % 3) ~= 0 then--在mudlet的lua中,3个字节组成一个汉字,检测对象的字节长度如果不能被3整除,说明不是汉字,返回值为0,检测取消
    return 0
end
result =0               --设定返回值结果初始值为0
unit =1                   --设定数位单元值为1
grade =1                  --设定数位权位值为1

for i = #CHN / 3 , 1 , -1 do
char = utf8.sub(CHN,i,i) --从检测对象的尾部截取第1个汉字,以供下面的代码进行判断
if char == "十" then   --如果检测对象汉字为“十”
    unit = 10*grade      --设定权位系数10 ,万位以后的权位值发生质变,
    if (i==1)then      --如果检测对象位置为1,即是首位数字
      result = result + unit--则返回值为数位值10
    elseif CHNum_tbl == nil then --如果检测对象的左边为“零”、“O”,或没有发现数字汉字
      result = result + unit
    end
elseif char == "百" then   --如果检测对象汉字为“百”
    unit = 100*grade      --设定数位权位系数为100
elseif char == "千" then   --如果检测对象汉字为“千”
    unit = 1000*grade         --设定数位权位系数为1000
elseif char == "万" then   --如果检测对象汉字为“万”
    unit = 10000*grade      --设定数位权位系数为10000
    grade = 10000             --从“万”开始,规则发生变化,权位“万”升级为节权位,数值为10000
else      
    if CHNum_tbl ~= nil then --如果检测对象汉字不是“十”、“百”、“千”、“万”,而是“一”~“九”,则
    result = result + CHNum_tbl*unit--返回值为汉字转化为阿拉伯数字,并乘以权位值
                                          --“个”位时,unit=1
                                          --“十”位时,unit=10
                                          --“百”位时,unit=100
                                          --...
                                          --“万”位时,unit=10000
                                          --“万”位以后的“十”,unit=10*10000
                                          --“万”位以后的“百”,unit=100*10000
                                          --“万”位以后的“千”,unit=1000*10000                                          
    end
end
end
send("\nsell "..matches.." for "..result)


```





mtyzy 发表于 2022-5-11 14:51:55

加油,争取早日写一个完整的mudlet攻略hzs
页: [1]
查看完整版本: 在mudlet中实现汉字数字转阿拉伯数字-参考‘白驼初见‘卖鱼