Files
hakorune/examples/app_dice_rpg.nyash
Moe Charm 0bed0c0271 🎉 initial commit: Nyash Programming Language完成版
🚀 主要機能:
• Everything is Box哲学による革新的アーキテクチャ
• WebAssemblyブラウザー対応プレイグラウンド
• アーティスト協同制作デモ - 複数Boxインスタンス実証
• 視覚的デバッグシステム - DebugBox完全統合
• static box Mainパターン - メモリ安全設計

 言語機能:
• NOT/AND/OR/除算演算子完全実装
• ジェネリクス/テンプレートシステム
• 非同期処理(nowait/await)
• try/catchエラーハンドリング
• Canvas統合グラフィックス

🎨 ブラウザー体験:
• 9種類のインタラクティブデモ
• リアルタイムコード実行
• WebCanvas/WebConsole/WebDisplay
• モバイル対応完了

🤖 Built with Claude Code collaboration
Ready for public release!
2025-08-09 15:14:44 +09:00

218 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 🎲 サイコロRPGバトル - RandomBoxとDebugBoxを活用した戦闘システム
print("⚔️ === Dice RPG Battle ===" )
print("RandomBoxを使ったダイスバトルシステム\n")
// デバッグトラッキング開始
DEBUG = new DebugBox()
DEBUG.startTracking()
// 戦闘ログ記録用
battleLog = new ArrayBox()
// キャラクターBox定義
box Character {
init {
name,
hp,
maxHp,
attack,
defense,
dice,
math
}
// ダメージを受ける
func takeDamage(damage) {
me.hp = me.hp - damage
if (me.hp < 0) {
me.hp = 0
}
}
// 生存確認
func isAlive() {
return me.hp > 0
}
// HP表示整数演算のみ
func getHpBar() {
// HP比率を10倍して計算 (HP * 10) / maxHP
hpx10 = me.hp * 10
// 整数除算を手動実装
filled = 0
temp = hpx10
loop(temp >= me.maxHp) {
temp = temp - me.maxHp
filled = filled + 1
}
// filledが10を超えないように制限
if (filled > 10) {
filled = 10
}
bar = "["
i = 0
loop(i < 10) {
if (i < filled) {
bar = bar + "■"
} else {
bar = bar + "□"
}
i = i + 1
}
bar = bar + "]"
return bar
}
// ステータス表示
func showStatus() {
print(me.name + " HP: " + me.hp + "/" + me.maxHp + " " + me.getHpBar())
print(" ATK: " + me.attack + " DEF: " + me.defense)
}
}
// キャラクター作成関数
function createCharacter(name, hp, attack, defense) {
char = new Character()
char.name = name
char.hp = hp
char.maxHp = hp
char.attack = attack
char.defense = defense
char.dice = new RandomBox()
char.math = new MathBox()
DEBUG.trackBox(char, "Character-" + name)
return char
}
// バトル実行関数
function performAttack(attacker, defender) {
print("\n⚔ " + attacker.name + " の攻撃!")
// 攻撃ダイスロール (1-6)
attackRoll = attacker.dice.randInt(1, 6)
print("🎲 攻撃ダイス: " + attackRoll)
// 防御ダイスロール (1-6)
defenseRoll = defender.dice.randInt(1, 6)
print("🛡️ " + defender.name + " の防御ダイス: " + defenseRoll)
// ダメージ計算
baseDamage = attacker.attack + attackRoll
defense = defender.defense + defenseRoll
damage = baseDamage - defense
if (damage < 0) {
damage = 0
}
// クリティカル判定 (6が出たら2倍)
if (attackRoll == 6) {
print("💥 クリティカルヒット!")
damage = damage * 2
}
// ダメージ適用
defender.takeDamage(damage)
if (damage > 0) {
print("💢 " + defender.name + " に " + damage + " ダメージ!")
} else {
print("🛡️ " + defender.name + " は攻撃を完全に防いだ!")
}
// バトルログに記録
logEntry = attacker.name + " → " + defender.name + ": " + damage + " damage"
battleLog.push(logEntry)
return damage
}
// メインゲーム
print("\n🎮 ゲーム開始!\n")
// プレイヤーとエネミー作成
player = createCharacter("勇者", 50, 10, 5)
enemy = createCharacter("ゴブリン", 30, 8, 3)
// 初期ステータス表示
print("📊 初期ステータス:")
player.showStatus()
enemy.showStatus()
// バトルループ
turn = 1
battleContinue = true
loop(battleContinue) {
print("\n========== ターン " + turn + " ==========")
// プレイヤーのターン
if (player.isAlive()) {
performAttack(player, enemy)
}
// エネミーのターン
if (enemy.isAlive()) {
performAttack(enemy, player)
}
// 現在のステータス表示
print("\n📊 現在のステータス:")
player.showStatus()
enemy.showStatus()
// 終了条件チェック
playerAlive = player.isAlive()
enemyAlive = enemy.isAlive()
if (not playerAlive) {
battleContinue = false
}
if (not enemyAlive) {
battleContinue = false
}
turn = turn + 1
// 安全装置(無限ループ防止)
if (turn > 50) {
print("\n⏱ タイムアップ!引き分け!")
break
}
}
// 勝敗判定
print("\n🏁 === バトル終了! ===")
playerAlive = player.isAlive()
enemyAlive = enemy.isAlive()
if (playerAlive) {
if (not enemyAlive) {
print("🎉 勇者の勝利!")
} else {
print("🤝 引き分け!")
}
} else {
if (enemyAlive) {
print("💀 ゴブリンの勝利...")
} else {
print("🤝 引き分け!")
}
}
// バトルログ表示
print("\n📜 === バトルログ ===")
i = 0
loop(i < battleLog.length()) {
print("[" + (i + 1) + "] " + battleLog.get(i))
i = i + 1
}
// デバッグ情報
print("\n💾 === メモリレポート ===")
print(DEBUG.memoryReport())
print("\n✅ Dice RPG Battle completed!")