195 lines
4.4 KiB
Plaintext
195 lines
4.4 KiB
Plaintext
// Text Adventure Game - Items Module
|
|
// アイテムシステムの基本実装
|
|
|
|
// 基本アイテムBox
|
|
box Item {
|
|
init { name, description, weight, value }
|
|
|
|
Item(name, description, weight, value) {
|
|
me.name = name
|
|
me.description = description
|
|
me.weight = weight
|
|
me.value = value
|
|
}
|
|
|
|
// アイテムの表示
|
|
display() {
|
|
return me.name + " - " + me.description
|
|
}
|
|
|
|
// Getter for field access bug workaround
|
|
getName() {
|
|
return me.name
|
|
}
|
|
|
|
// 詳細情報表示
|
|
examine() {
|
|
return me.description + " (Weight: " + me.weight + ", Value: " + me.value + ")"
|
|
}
|
|
|
|
// 持ち上げ可能かチェック
|
|
canPickUp() {
|
|
return me.weight <= 10
|
|
}
|
|
|
|
// 価値があるかチェック
|
|
isValuable() {
|
|
return me.value > 50
|
|
}
|
|
}
|
|
|
|
// 武器アイテム(継承なし、全フィールド独立)
|
|
box Weapon {
|
|
init { name, description, weight, value, damage, durability }
|
|
|
|
Weapon(name, description, weight, value, damage, durability) {
|
|
me.name = name
|
|
me.description = description
|
|
me.weight = weight
|
|
me.value = value
|
|
me.damage = damage
|
|
me.durability = durability
|
|
}
|
|
|
|
display() {
|
|
return me.name + " (DMG: " + me.damage + ")"
|
|
}
|
|
|
|
getName() {
|
|
return me.name
|
|
}
|
|
|
|
examine() {
|
|
return me.description + " - Damage: " + me.damage + ", Durability: " + me.durability + "/" + me.durability
|
|
}
|
|
|
|
canPickUp() {
|
|
return me.weight <= 15 // 武器は少し重くてもOK
|
|
}
|
|
|
|
// 武器の使用
|
|
use() {
|
|
if me.durability > 0 {
|
|
me.durability = me.durability - 1
|
|
return me.damage
|
|
} else {
|
|
return 0 // 壊れた武器
|
|
}
|
|
}
|
|
|
|
isBroken() {
|
|
return me.durability <= 0
|
|
}
|
|
|
|
// Weaponにも必要なメソッド追加
|
|
isValuable() {
|
|
return me.value > 50
|
|
}
|
|
}
|
|
|
|
// 消費アイテム(継承なし、全フィールド独立)
|
|
box Consumable {
|
|
init { name, description, weight, value, effect, uses }
|
|
|
|
Consumable(name, description, weight, value, effect, uses) {
|
|
me.name = name
|
|
me.description = description
|
|
me.weight = weight
|
|
me.value = value
|
|
me.effect = effect
|
|
me.uses = uses
|
|
}
|
|
|
|
display() {
|
|
return me.name + " (" + me.uses + " uses)"
|
|
}
|
|
|
|
getName() {
|
|
return me.name
|
|
}
|
|
|
|
examine() {
|
|
return me.description + " - Effect: " + me.effect + ", Uses remaining: " + me.uses
|
|
}
|
|
|
|
canPickUp() {
|
|
return true // 消費アイテムは軽い
|
|
}
|
|
|
|
// アイテムの使用
|
|
use() {
|
|
if me.uses > 0 {
|
|
me.uses = me.uses - 1
|
|
return me.effect
|
|
} else {
|
|
return 0 // 使い切った
|
|
}
|
|
}
|
|
|
|
isEmpty() {
|
|
return me.uses <= 0
|
|
}
|
|
|
|
// Consumableにも必要なメソッド追加
|
|
isValuable() {
|
|
return me.value > 25
|
|
}
|
|
}
|
|
|
|
// 鍵アイテム(特別なアイテム)
|
|
box Key {
|
|
init { name, description, targetDoor, weight, value }
|
|
|
|
Key(name, description, targetDoor) {
|
|
me.name = name
|
|
me.description = description
|
|
me.targetDoor = targetDoor
|
|
me.weight = 1 // 鍵は軽い
|
|
me.value = 10 // 鍵は安い
|
|
}
|
|
|
|
display() {
|
|
return me.name + " (Key)"
|
|
}
|
|
|
|
getName() {
|
|
return me.name
|
|
}
|
|
|
|
examine() {
|
|
return me.description + " - Opens: " + me.targetDoor
|
|
}
|
|
|
|
canPickUp() {
|
|
return true // 鍵は必ず拾える
|
|
}
|
|
|
|
// 扉を開けるか確認
|
|
opensDoor(doorName) {
|
|
return me.targetDoor == doorName
|
|
}
|
|
|
|
// Keyにも必要なメソッド追加
|
|
isValuable() {
|
|
return me.value > 50 // 鍵は特別価値が高い場合のみ
|
|
}
|
|
}
|
|
|
|
// アイテムファクトリー(便利関数)
|
|
function createSword() {
|
|
return new Weapon("Iron Sword", "A sharp iron blade", 8, 100, 15, 50)
|
|
}
|
|
|
|
function createPotion() {
|
|
return new Consumable("Health Potion", "Restores health", 1, 25, 50, 1)
|
|
}
|
|
|
|
function createKey(doorName) {
|
|
return new Key("Old Key", "An ancient rusty key", doorName)
|
|
}
|
|
|
|
function createTreasure() {
|
|
return new Item("Golden Coin", "A shiny gold piece", 1, 100)
|
|
}
|
|
|
|
print("📦 Items module loaded successfully!") |