北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 1920|回复: 1

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

[复制链接]
发表于 2022-5-11 12:50:39 | 显示全部楼层 |阅读模式
首先声明,以下代码是从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的部分截图:
![file]()
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[2]
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[utf8.sub(CHN,i-1,i-1)] == 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[char] ~= nil then --如果检测对象汉字不是“十”、“百”、“千”、“万”,而是“一”~“九”,则
    result = result + CHNum_tbl[char]*unit  --返回值为汉字转化为阿拉伯数字,并乘以权位值
                                            --“个”位时,unit=1
                                            --“十”位时,unit=10
                                            --“百”位时,unit=100
                                            --...
                                            --“万”位时,unit=10000
                                            --“万”位以后的“十”,unit=10*10000
                                            --“万”位以后的“百”,unit=100*10000
                                            --“万”位以后的“千”,unit=1000*10000                                            
    end
  end
end
send("\nsell "..matches[3].." for "..result)


```





北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2022-5-11 14:51:55 | 显示全部楼层
加油,争取早日写一个完整的mudlet攻略
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-4-20 08:56 PM , Processed in 0.011982 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表