Equipmentクラス

Equipment(装備)クラス


再度仕切り直し

  • pcから見たアイテムと装備
    • pcから見たアイテム
 pc.items
 item = pc.items[idx]
 item.pn, item.stack# item.stack = nil/0/255
index アイテム(pn) 個数
0 1 1
1 2 1
2 100 5

    • pcから見た装備
 pc.equipments
 equipment = pc.equipments[area]
 equipment.area, equipment.pn, equipment.name
部位(area) 装備品(pn)
0 1
1 12
2 7
3 22

    • pcから見た装備とステータス
Area Name Classes ac st at damage
部位 アイテム名 装備可否 致傷
Main 長剣 F----SLN 0 4 0 1D8+0
Sub 鉄の盾 F-PT-SLN -3 0 0 nil
Body 板金鎧 F-PT-SLN -5 0 0 nil
Head 鉄兜 F-PT-SLN -2 0 0 nil
Hand 銀の小手 F----SLN -3 0 0 nil
Misc 回復の指輪 F-PT-SLN 0 0 0 0D0+0




仕切りなおし

  • 装備するとはどういうことか
 pcの@equip[area] = item
 pc.equip item# pc が item を equip する(areaが一意の場合は可能)
 pc.equip area, item# pc が item を areaに equip する
 # pc が area に 装備しているItemを取り出す
 p item_index, cursed = pc.equipments[area]# => [1, false]
 p pc.items[pc.equipments[Area][ItemIndex]]# => Item
  • 呪い装備について
    • 装備したときに条件があわないと呪われる。
    • 呪われた状態とはどういう状態か。
 p pc.cursed?#
    • どこの部位が呪われているのか。
 p pc.equipments[area].cursed?
 p pc.equipments.head.cursed?
 p pc.equipments.main.cursed?
 p pc.equipments[Area::Main].cursed?
 # 
 p pc.equipments.cursed# => [0, 2, 3]# Main, Body, Head
 p pc.equipments.
 # 部位メイン~部位ミスクまで、それぞれ
 # 装備可能なアイテムを列挙
 # 
 (Area::Main..Area::Misc).each{|area|
   area_items = items.collect{|item|
     item.area == area ? item : nil
   }
   item gets
   
 }
  • アイテムを装備すると、装備状態と呪い状態のデータが加わる

要件

  1. PCの持っているアイテム群から特定の部位の装備を選び出す。

p pc.equipments.ac
p pc.equipments.head.ac
p pc.equipments.head.equip item#これは何か違う気がする
p pc.equip item#
p pc.equipments.area(0)

 # pcの
 p pc.items.area(0)#
 # 使用可能なアイテムを選び出す。
 p pc.items.collect{|item| item.use? }
 # 装備可能なアイテムを選び出す。
 p pc.items.collect{|item| item.area?(0) ? item : nil }# いまいち
 p pc.items.area(0)
 # 装備中のアイテムを選び出す。
 p pc.items.collect{|item| item.equip? ? item : nil }#
 p pc.items.equiped# 

pcの@itemsは、単なる配列でよい。
pc.itemsは、配列にオプションメソッドをつけて返す。
pc.items.equip# => 装備中のアイテムを配列で返す。
pc.items.area(area)# => 装備部位areaのアイテムを配列で返す。

装備の変更
pc.items.area(0).cursed?# => 部位0のアイテムで現在呪われているか?
pc.items.area(0).take_off# => 呪われていないなら、部位0の装備を全て装脱
pc.equip pc.items[index]# => index番目の装備を装着
pc.equip item# => itemを装着

items.equip


装備するとはどういうことか?


壱:pc.items[index]の@equip=true

弐:pcの@equip[area] = item.pn

参:pc.items[index] = [item.pn, equip, cursed]


itemオブジェクトの@equipがtrueになる。falseで装備解除。
pcの@equip[index]プロパティにitemオブジェクトが代入される。

あれ?Equipmentsクラスっているんだろうか・・・。( ̄~ ̄;)

壱の場合

pc.items[index].equip
  • itemオブジェクトがequip,take_offメソッドを持つ必要がある。
  • itemクラス@equipがequipでtrueに、take_offでfalseになる。
  • 欠点:装備する前にきちんと全部脱がないと、一部位にアイテムを多数装着できてしまう。

 # 着脱
 pc.items[index].equip# => item @equip = true
 pc.items[index].take_off# => item @equip = false
 pc.items[index].equip true# item @equip = true
 pc.items[index].equip false# item @equip = false

弐の場合

  • pcが@itemsと@equipsを持つ必要がある。
  • pc.equip itemで@equips[item.area] = @items.index(item)
  • @equips[area] = nil
  • 利点:一部位にアイテムを一つしか装着できないため、一部位多数装着問題は発生しない。

 # 着脱
 pc.equip item
 pc.equip(area, item)
 pc.equip(area, nil)

参の場合

  • pcが@itemsを持つ。itemは[item.pn, equip, cursed]からなる。
  • pcが
  • 利点:恐らくDBとしては、各アイテム欄毎にアイテム番号、非装着/装着中、呪われていない/呪われてるが必要で、その書式通り。
  • 欠点:装着前にきちんと脱がないと、一部位多数装着問題が発生する。

 # 着脱
 pc.items[index].equip# これは何か違うな・・・
 pc.equip @items.index(item)# 
 @items[index][Equip] = true# 

ハイブリッドの場合?

  • Item.equip?
  • pc.equip? item# itemを装備中かどうか
  • pc.items.index(item
  • pc.items[index].equip?# アイテムリストのindex番目にあるアイテムを装備中かどうか
  • pc.items.collect{|item| item.equip? ? item : nil }# 装備中のアイテムをリストアップ
  • pc.equip(area, nil)# 部位areaの装備を解除する
  • pc.equip(area, item)# 部位areaにitemを装備する

名前:
コメント:

タグ:

+ タグ編集
  • タグ:
最終更新:2010年05月17日 11:39
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。