🎲 TEBAK ANGKA 🎯
1 – 100 | tebak & menang
🔍 TEBAK
⟳ RESET
📊 Percobaan: 0
🔄 Menyiapkan game... tunggu sebentar
📦 PyScript loading...
import random from js import document, window from pyodide.ffi import create_proxy # ========== STATE GLOBAL ========== secret_number = random.randint(1, 100) attempts = 0 game_over = False # ========== FUNGSI UPDATE UI (Python -> DOM) ========== def update_display(message, attempts_val=None): msg_elem = document.getElementById("gameMessage") if msg_elem: msg_elem.innerHTML = message if attempts_val is not None: att_elem = document.getElementById("attemptDisplay") if att_elem: att_elem.innerHTML = f"📊 Percobaan: {attempts_val}" else: att_elem = document.getElementById("attemptDisplay") if att_elem: att_elem.innerHTML = f"📊 Percobaan: {attempts}" def clear_and_focus(): inp = document.getElementById("guessInput") if inp: inp.value = "" inp.focus() # ========== LOGIKA TEBAK (akan dipanggil dari JS) ========== def tebak_angka_from_js(event=None): global attempts, game_over, secret_number if game_over: update_display("🏁 Game sudah selesai! Tekan RESET untuk bermain lagi.", attempts) clear_and_focus() return input_elem = document.getElementById("guessInput") if not input_elem: return raw = input_elem.value if raw == "" or raw is None: update_display("⚠️ Masukkan angka tebakan (1-100)", attempts) clear_and_focus() return try: guess = int(raw) except: update_display("❌ Harus angka bulat!", attempts) clear_and_focus() return if guess < 1 or guess > 100: update_display("📏 Tebakan harus antara 1 dan 100!", attempts) clear_and_focus() return attempts += 1 if guess < secret_number: update_display(f"📈 Terlalu RENDAH! {guess} < rahasia. Coba lagi.", attempts) elif guess > secret_number: update_display(f"📉 Terlalu TINGGI! {guess} > rahasia. Coba lebih kecil.", attempts) else: # MENANG update_display(f"🎉🎉 SELAMAT! 🎉🎉
Angka {secret_number} benar! Kamu pakai {attempts} tebakan.
✨ Tekan RESET untuk bermain lagi ✨", attempts) game_over = True clear_and_focus() return clear_and_focus() def reset_game_from_js(event=None): global secret_number, attempts, game_over secret_number = random.randint(1, 100) attempts = 0 game_over = False update_display("🔄 Game direset! Tebak angka baru 1–100. Semoga beruntung!", attempts) clear_and_focus() # optional console print("[PyScript] Reset! new secret =", secret_number) # ========== EKSPOR FUNGSI KE JAVASCRIPT ========== window.tebakGame = create_proxy(tebak_angka_from_js) window.resetGame = create_proxy(reset_game_from_js) # pesan awal ketika Python siap def init_game(): update_display("✨ Tebak angka rahasia 1–100. Tekan TEBAK atau ENTER! ✨", 0) clear_and_focus() # ubah status loading status_elem = document.getElementById("pyStatus") if status_elem: status_elem.innerHTML = "✅ Python siap | Mulai tebak!" init_game()