Project1

标题: 【LZ已經窮極無聊】真·泛用化數據庫擴展 [打印本页]

作者: 电子最终龙    时间: 2013-8-27 22:59
标题: 【LZ已經窮極無聊】真·泛用化數據庫擴展
{:2_270:} 之前有人說過用戶自定義數據庫可以直接用代碼描述
LZ也深以為然,直到某天……



{:2_271:} LZ再也不會愛了
於是就有了下面的奇怪的東西
  1. class CusAttribute
  2. def initialize(name, default_value)
  3. @name = name
  4. @value = default_value
  5. attr_accessor :name
  6. attr_accessor :value
  7. end

  8. class CusClass
  9. def initialize(name)
  10. @name = name
  11. @attributes = []
  12. end
  13. def new_attribute(name, default_value)
  14. @attributes.push(CusAttribute.new(@attributes.size, name, default_value))
  15. end
  16. def edit_name(old_name, new_name)
  17.   if @attributes.size > 0
  18.     for i in [email protected]
  19.       unless @attributes[i] == nil
  20.         @attributes[i].name = new_name if @attributes[i].name == old_name
  21.       end
  22.     end
  23.   end
  24. end
  25. def edit_value(name, value)
  26.   if @attributes.size > 0
  27.     for i in [email protected]
  28.       unless @attributes[i] == nil
  29.         @attributes[i].value = value if @attributes[i].name == name
  30.       end
  31.     end
  32.   end
  33. end
  34. def delete_attribute(name)
  35.   if @attributes.size > 0
  36.     for i in [email protected]
  37.       unless @attributes[i] == nil
  38.         @attributes.delete(@attributes[i]) if @attributes[i].name == name
  39.       end
  40.     end
  41.   end
  42. end
  43. def attribute(name)
  44.   if @attributes.size > 0
  45.     for i in [email protected]
  46.       unless @attributes[i] == nil
  47.         return @attributes[i] if @attributes[i].name == name
  48.       end
  49.     end
  50.   end
  51.   return nil
  52. end
  53. def attrbute_num
  54.   return @attributes.size
  55. end
  56. attr_reader: name
  57. end
复制代码
{:2_270:}
然後可以用RM生成和編輯數據類,然後創建數據、修改數據……
還可以整個數據庫都寫好后再寫點小代碼轉換回普通的類,比如RPG::什麽什麽
作者: 进击の虎叔    时间: 2013-8-27 23:16
俺没糖了,明天再塞,不过这属性真心多,是即时战斗么
作者: 电子最终龙    时间: 2013-8-27 23:50
进击の虎叔 发表于 2013-8-28 01:16
俺没糖了,明天再塞,不过这属性真心多,是即时战斗么

其實是戰棋=。=
作者: 紫英晓狼1130    时间: 2013-8-28 06:48
这是要复杂属性嘛~
作者: 无脑之人    时间: 2013-8-28 10:46
科学!
不过还是那个输入的dll方便一些……
作者: Sunny.J    时间: 2013-8-28 11:45
表示根本不知道lz在说什么~
作者: tjjlb    时间: 2013-8-28 12:16
卧槽好复杂!
作者: SK才是王道    时间: 2013-8-28 12:23
卧槽好牛B!
作者: 一瞬间的幻觉    时间: 2013-8-28 15:06
楼主看不懂这个什么地方用到呢?
作者: 电子最终龙    时间: 2013-8-28 15:35
一瞬间的幻觉 发表于 2013-8-28 17:06
楼主看不懂这个什么地方用到呢?

步驟1:在紙上或者RM或者記事本寫好需要創建的數據類的屬性
步驟2:在RM中以主樓的泛用數據類為數據類編寫數據編輯器
步驟3:根據數據類的屬性使用通用數據類的編輯器製作數據庫,按需要輸出成文件(通常是RXDATA)
步驟4(推薦):編寫轉換代碼,將已經完成的泛用格式數據庫轉換回步驟1中編寫的類

例:

步驟1:actor類中有EXP,HP,SP,ATK,DEF,AGI六項屬性,則可以設定成:
class Actor
def initialize
@exp = 0; @hp = 0; @sp = 0; @atk=0,@def=0
end
attr_accessor:(略)
end

步驟2:編寫泛用數據類的圖形化編輯器
生成角色數據類時則調用方法:
actor_class = CusClass.new("角色數據")
actor_class.new_attribute("HP", 0)
actor_class.new_attribute("MP", 0)
(略)

創建數據類時的語句:actor_data = actor_class.clone
編輯時調用方法:actor_data.edit_value("屬性名", 數值)

步驟3用過腳本儲存數據庫的基本都知道怎麼回事了

步驟4:
actor = Actor.new
actor.exp = actor_class.attribute("exp")
actor.hp = actor_class.attribute("hp")
如此類推

========================================

主樓的泛用化數據類其實就是編寫數據編輯器才會用到的
作者: 你最珍贵    时间: 2013-8-28 15:58
这可以当做加点的吗




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1