import random # ======== Player Stats ======== player_name = input("Nick name!: ") level = 1 exp = 0 hp = 200 max_hp = 200 gold = 50 inventory = {"Potion": 1} weapon = {"name": "Tangan Kosong", "dmg": (5, 10)} armor = {"name": "Baju Gembel", "def": 0} # ======== Loot Tracker ======== loot_taken = {} # ======== Fungsi ======== def show_stats(): print(f"\n=== Status {player_name} ===") print(f"Level: {level} | EXP: {exp}") print(f"HP: {hp}/{max_hp}") print(f"Gold: {gold}") print(f"Weapon: {weapon['name']} (Damage: {weapon['dmg'][0]}-{weapon['dmg'][1]})") print(f"Armor: {armor['name']} (Defense: {armor['def']})") print(f"Inventory: {inventory}\n") def level_up(): global level, max_hp, hp level += 1 max_hp += 30 hp = max_hp print(f"\n{player_name} naik level! Level {level}, HP penuh!") def equip_item(): global weapon, armor, max_hp, hp, inventory print("\n=== Equip Item ===") print("1. Pedang (+5 dmg)") print("2. Perisai (+50 HP, +3 def)") print("3. Batal") choice = input("Pilih: ") if choice == "1": if inventory.get("Pedang", 0) > 0: inventory["Pedang"] -= 1 weapon = { "name": "Pedang Negro", "dmg": (weapon["dmg"][0] + 5, weapon["dmg"][1] + 5) } print("Pedang berhasil dipakai! Damage naik.") else: print("Apasi, kaga ada.") elif choice == "2": if inventory.get("Perisai", 0) > 0: inventory["Perisai"] -= 1 armor = { "name": "Shield", "def": armor["def"] + 3 } max_hp += 50 hp += 50 print("Shield dipakai! HP & defense naik.") else: print("Kaga punya .") else: print("Batal.") def battle(monster_name, monster_hp, monster_dmg): global hp, gold, inventory, exp print(f"\nKamu bertemu {monster_name}!") while monster_hp > 0 and hp > 0: aksi = input("Serang, heal, atau lari? ").lower() if aksi == "serang": dmg_player = random.randint(*weapon["dmg"]) dmg_monster = max(0, random.randint(*monster_dmg) - armor["def"]) monster_hp -= dmg_player hp -= dmg_monster print(f"Kamu memberi {dmg_player} damage.") print(f"{monster_name} memberi {dmg_monster} damage.") elif aksi == "heal": if inventory.get("Potion", 0) > 0: heal = random.randint(50, 55) hp = min(max_hp, hp + heal) inventory["Potion"] -= 1 print(f"HP +{heal}") else: print("Abis potionnya.") elif aksi == "lari": if random.choice([True, False]): print("Kamu kabur!") return False else: dmg_monster = max(0, random.randint(*monster_dmg) - armor["def"]) hp -= dmg_monster print(f"Ga bisa, ketangkep {dmg_monster} damage.") else: print("ngaco.") print(f"HP kamu: {hp} | HP {monster_name}: {monster_hp}") if hp <= 0: print("\nCupu!") return True else: loot_gold = random.randint(30, 120) loot_item = random.choice(["Potion", "Pedang", "Perisai"]) gold += loot_gold inventory[loot_item] = inventory.get(loot_item, 0) + 1 exp_gain = random.randint(40, 70) exp += exp_gain print(f"\nMenang! Dapat {loot_gold} gold, {loot_item}, {exp_gain} EXP.") if exp >= level * 100: level_up() return False def shop(): global gold, weapon, armor, inventory print("\nShop:") print("1. Potion (30 gold)") print("2. Pedang +7 dmg (100 gold)") print("3. Armor +5 def (100 gold)") print("4. Keluar") choice = input("Pilih: ") if choice == "1" and gold >= 30: gold -= 30 inventory["Potion"] = inventory.get("Potion", 0) + 1 print("Potion dibeli.") elif choice == "2" and gold >= 100: gold -= 100 weapon = {"name": "Pedang +7", "dmg": (weapon["dmg"][0]+7, weapon["dmg"][1]+7)} print("Pedang dibeli.") elif choice == "3" and gold >= 100: gold -= 100 armor = {"name": "Armor +5", "def": armor["def"] + 5} print("Armor dibeli.") else: print("Keluar / Cari duit lagi.") # ======== Dungeon Loop ======== floor = 1 while hp > 0: print(f"\n=== Lantai {floor} ===") show_stats() if floor not in loot_taken: loot_taken[floor] = False pilihan = input("monster, loot, shop, equip, naik, keluar: ").lower() if pilihan == "monster": monster = random.choice([ ("Goblin", (10, 20)), ("Serigala", (15, 25)), ("Orc", (20, 30)) ]) monster_hp = random.randint(30, 60) if battle(monster[0], monster_hp, monster[1]): break elif pilihan == "loot": if loot_taken[floor]: print("Udah kaga ada.") else: gold_found = random.randint(50, 150) loot_item = random.choice(["Potion", "Pedang", "Perisai"]) gold += gold_found inventory[loot_item] = inventory.get(loot_item, 0) + 1 loot_taken[floor] = True print(f"Dapat {gold_found} gold dan {loot_item}.") elif pilihan == "shop": shop() elif pilihan == "equip": equip_item() elif pilihan == "naik": floor += 1 print(f"Naik ke lantai {floor}!") elif pilihan == "keluar": break # ======== Akhir Game ======== print("\n=== GAME SELESAI ===") show_stats() print(f"Makasih udh main, {player_name}!")