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") print("2. Perisai") print("3. Unequip weapon") print("4. Batal") choice = input("Pilih: ") if choice == "1": # Cek pedang di inventory pedangs = [item for item in inventory if item.startswith("Pedang") and inventory[item] > 0] if not pedangs: print("Lu kaga punya pedang.") return print("Pedang di inventory:") for idx, p in enumerate(pedangs, start=1): print(f"{idx}. {p} ({inventory[p]} pcs)") pilih = input("Pilih pedang: ") if pilih.isdigit(): pilih = int(pilih) if 1 <= pilih <= len(pedangs): nama_pedang = pedangs[pilih-1] inventory[nama_pedang] -= 1 weapon["name"] = nama_pedang weapon["dmg"] = (weapon["dmg"][0]+7, weapon["dmg"][1]+7) print(f"{nama_pedang} dipakai. Damage naik +7.") else: print("Batal.") 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("Lu kaga punya Perisai.") elif choice == "3": unequip_weapon() else: print("Batal.") def unequip_weapon(): global weapon, inventory if weapon["name"] != "Tangan Kosong": inventory[weapon["name"]] = inventory.get(weapon["name"], 0) + 1 print(f"{weapon['name']} dikembalikan ke inventory.") weapon["name"] = "Tangan Kosong" weapon["dmg"] = (5, 10) print("Sekarang pakai Tangan Kosong.") 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 # ======== Shop dengan item random dan special ======== def shop(): global gold, weapon, armor, inventory print("\n=== Selamat Datang di Shop! ===") print("Warung ini selalu buka, gak kayak ayam Zaidan.") items = [ ("Potion", 30), ("Pedang Negro +7 dmg", 100), ("Armor +5 def", 100) ] # Chance item spesial if random.random() < 0.3: special_item = ("Pedang Legendaris", 500) items.append(special_item) print("🎉 Selamat! Ada item spesial muncul: Pedang Legendaris! 🎉") print("\nBarang yang tersedia:") for idx, (name, price) in enumerate(items, start=1): print(f"{idx}. {name} ({price} gold)") print(f"{len(items)+1}. Keluar") choice = input("Pilih: ") if choice.isdigit(): choice = int(choice) if 1 <= choice <= len(items): name, price = items[choice-1] if gold >= price: gold -= price if name == "Potion": inventory["Potion"] = inventory.get("Potion", 0) + 1 print(f"{name} masuk inventory.") elif name.startswith("Pedang Legendaris"): weapon["name"] = name weapon["dmg"] = (weapon["dmg"][0]+50, weapon["dmg"][1]+50) print(f"{name} langsung dipakai! Damage naik +50.") elif name.startswith("Pedang"): inventory[name] = inventory.get(name,0)+1 print(f"{name} masuk inventory.") elif name.startswith("Armor"): armor["name"] = name armor["def"] += 5 print(f"{name} berhasil dibeli! Defense naik +5.") else: print("Cari duit lagi ege.") else: print("typo atau emng dongo?.") else: print("typo atau emng dongo?.") # ======== 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}!")