Files

195 lines
4.4 KiB
Plaintext
Raw Permalink Normal View History

// 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!")