北大侠客行MUD论坛

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

面向对象方式封装myStatusWindow

[复制链接]
发表于 2011-3-25 11:35:41 | 显示全部楼层 |阅读模式
前几天研究了 kudo 的myStatusWindow
现在使用面向对象技术重新封装myStatusWindow,做成window类,方便大家使用mini_Window只要写很少代码就能实现mini_window
require "sj_mini_win"  --下载的 lua引用
local win=window.new() --监控窗体实例化
win.name="status_window"  --名称属性 设置
win.font_height=8 --字体高度属性 设置 默认是18
win.font_name="幼圆" --默认是新宋体
win:addText("label1","my_status_window") --标签创建
win:addGauge ("jingsheng","精神: ", 100, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0) --创建进度条
win:addGauge ("qixue","气血: ", 50, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0)
win:addGauge ("jingli","精力: ", 50, "darkgreen", "mediumblue", "darkred", "50".."/".."70", 0)
win:addGauge("neili","内力: ", 100, "darkgreen", "mediumblue", "darkred", "200".."/".."100", 0)
win:addGauge("food","食物: ", 400, "darkgreen", "mediumblue", "darkred", "80".."/".."100", 0)
win:addGauge("drink","饮水: ", 500, "darkgreen", "mediumblue", "darkred", "100".."/".."100", 0)
win:addGauge("pot","潜能: ", 100, "darkgreen", "mediumblue", "darkred", "100", 1)
win:refresh() --刷新
--实现原来代码功能
--------------------
窗体内容更新
function test()
  local win=window.new() --监控窗体实例化
  win.name="status_window"  --名称属性 设置
  win.font_height=10 --字体高度属性 设置 默认是18
  win.font_name="幼圆" --默认是新宋体
  win:addText("label1","更新窗体") --标签创建
  win:addGauge("pot","潜能: ", 100, "darkgreen", "mediumblue", "darkred", "200", 1)  --利用第一个id参数  更新状态条信息 潜能从100-200
  win:refresh()
end

我对原来代码简单的修改了下,可能还会有bug欢迎大家对代码修改更新!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-3-25 12:18:38 | 显示全部楼层
好东西
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-3-25 12:41:36 | 显示全部楼层
我想弱弱的问句,面向对象封装…具体是个什么概念,有什么好处?不要见笑哈,门外汉的问题
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-3-25 14:44:11 | 显示全部楼层
原帖由 inspector 于 2011-3-25 12:41 PM 发表
我想弱弱的问句,面向对象封装…具体是个什么概念,有什么好处?不要见笑哈,门外汉的问题

面向对象核心思想就是 “代码重用”
拿这个mini_window 举例

看下 kudo 原来写的 [myStatusWindow]
前面一部分代码是创建mini_window 窗体颜色,窗体大小,字体大小 ,背影颜色
在--Triggers 分割线后面内容是创建窗体中的内容
AddTriggerEx(
            "hp_get_info",
            "(【 精神 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*【|【 气血 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*【|【 食物 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*【|【 饮水 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*【)",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "hp_get_info",
            0,
            90)
AddTriggerEx(
            "hp_get_info1",
            "(【 精力 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*|【 内力 】[\ ]+([0-9]+)[\ ]+/[\ ]+([0-9]+)[\ ]+.*|【 潜能 】 ([0-9]+).*|【 经验 】 ([0-9]+).*)",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "hp_get_info1",
            0,
            91)
AddTriggerEx(
            "hp_get_info3",
            "≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "",
            12,
            90)
AddTriggerEx(
            "hp_get_info4",
            "≡━━━━━━━━━━━━━━━━━━━━━━━◎北大侠客行◎━━≡",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "",
            12,
            90)
好!!! 理解这些以后,你想下如果我要创建一个status_window 来显示你的技能等级你会怎么改代码。
前面代码不用修改,后面trigger 代码都需要修改。

我现在换个思维模式(面向对象)写代码,我需要重用代码
这个好比 我先把格式合同都写好,里面留几个空格
你自己填上名字,这个合同就生效了。
local win=window.new() --监控窗体实例化  就是告诉程序 这个是哪个格式合同
win.name="status_window"  --空格填写  不填会有默认名字填进去
win.font_height=8 --其他一些 合同明细 字体是8号高度
win.font_name="幼圆" --默认是新宋体
win:addText("label1","my_status_window") --标签创建  
win:addGauge ("jingsheng","精神: ", 100, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0) --创建进度条
win:refresh() --生效
------------
这样你不用重头到尾写代码,只要把细节填写一些。写代码量就会少很多,而且代码质量会提高很多,bug也会少很多。
我现在需要一个显示技能等级status_win
local skillwin=window.new() --监控窗体实例化
skillwin.name="skill_window"  --空格填写  
skillwin.font_height=8 --
skillwin.font_name="宋体" --
skillwin:addGauge ("skill1","寒冰真气 : ", 83, "darkgreen", "mediumblue", "darkred", "4500".."/".."6889", 0) --创建进度条
skillwin:refresh() --
面向对象好处就是 不再需要在修改别人写的源代码,只需要在你自己代码中引用,调用对象就能实现这个功能了。

[ 本帖最后由 ptouch 于 2011-3-25 02:58 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-3-25 17:33:50 | 显示全部楼层
支持!学习下先
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-3-28 19:22:28 | 显示全部楼层
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-3-24 22:03:09 | 显示全部楼层
留贴仔细研究一下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-12-30 13:55:28 | 显示全部楼层
这个要好好研究一下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2013-6-21 07:13:49 | 显示全部楼层
好东西,必须顶的。。。。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 09:36 AM , Processed in 0.012942 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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