Skip to content

Instantly share code, notes, and snippets.

@Arsfiqball
Last active November 1, 2023 15:32
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Arsfiqball/680ae7f139631f14a7c78f60b721012e to your computer and use it in GitHub Desktop.
Save Arsfiqball/680ae7f139631f14a7c78f60b721012e to your computer and use it in GitHub Desktop.
Tugas membuat game tebak angka menggunakan bahasa Python dengan GUI dari Tkinter. Ini adalah implementasi dari Python 2. Untuk pengguna Python 3 ada sedikit perbedaan seperti library "Tkinter" menggunakan huruf kecil "tkinter" dan sisanya adalah sintaks umum dikotomi Python 2 & 3 seperti print. Penjelasannya ada di setiap segmen algoritma. Progr…
import random
from Tkinter import *
class App(Frame):
# Untuk membuat angka acak
# exclude adalah array dari angka yang harus dibuang misal ["1", "4", "7"]
# caranya dengan memanggil misal self.angka_acak(["1", "4", "7"])
@staticmethod
def angka_acak(exclude):
# angka yang tersedia
options = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
# hapus angka yang sudah dipakai (dispesisifikan oleh exclude)
for x in exclude:
options.remove(x)
# pilih secara acak angka yang tersedia
return options[random.randint(0, len(options) - 1)]
def reset_game(self):
# Membuat angka acak
angka1 = self.angka_acak([])
angka2 = self.angka_acak([angka1])
angka3 = self.angka_acak([angka1, angka2])
angka4 = self.angka_acak([angka1, angka2, angka3])
# simpan jawaban ke memori
self.jawaban = [angka1, angka2, angka3, angka4]
self.jumlah_percobaan = 0
self.log["text"] = ""
# Print contekan ke console
print "Sssst... jawaban benernya {} {} {} {} :P".format(angka1, angka2, angka3, angka4)
# Untuk memulai class App (yaitu jendela utama aplikasi)
# Cara menggunakannya:
# app = App(master)
# app.mainloop()
def __init__(self, master=None):
Frame.__init__(self, master)
# Konfigurasi Jendela Program
master.title("Program Tebak Angka")
self.grid()
# Prompt perintah
prompt = Label(self, text="Tuliskan tebakan anda!")
prompt.grid(row=0, padx=10, pady=10)
# Frame input sebagai wadah 4 input nanti
inputFrame = Frame(self)
inputFrame.grid(row=1, padx=20, pady=10)
options = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
# Tampilkan input tebakan dari pemain
self.angka1 = Listbox(inputFrame, height=1, width=1)
self.angka2 = Listbox(inputFrame, height=1, width=1)
self.angka3 = Listbox(inputFrame, height=1, width=1)
self.angka4 = Listbox(inputFrame, height=1, width=1)
self.angka1.insert(END, *options)
self.angka1.activate(0)
# options.remove(self.angka1.get('active'))
self.angka2.insert(END, *options)
self.angka2.activate(0)
# options.remove(self.angka2.get('active'))
self.angka3.insert(END, *options)
self.angka3.activate(0)
# options.remove(self.angka3.get('active'))
self.angka4.insert(END, *options)
self.angka4.activate(0)
# options.remove(self.angka4.get('active'))
self.angka1.grid(row=0, column=0, padx=5, pady=5)
self.angka2.grid(row=0, column=1, padx=5, pady=5)
self.angka3.grid(row=0, column=2, padx=5, pady=5)
self.angka4.grid(row=0, column=3, padx=5, pady=5)
# Tampilkan tombol untuk mencoba apakah tebakan benar
# Ketika tombol "coba" ditekan, maka fungsi self.tebak(self) dijalankan
coba = Button(inputFrame, text="coba", command=self.tebak)
coba.grid(row=0, column=4)
# Tempat memasukan hasil
self.result = Label(self)
self.result.grid(row=3, padx=10, pady=10)
self.log = Label(self)
self.log.grid(row=4, padx=10, pady=10)
self.reset_game()
# Fungsi untuk menjalankan tabakan
# dan menulis hasil ke self.result
def tebak(self):
# masukan tebakan ke array
tebakan = [
self.angka1.get('active'),
self.angka2.get('active'),
self.angka3.get('active'),
self.angka4.get('active')
]
for x in tebakan:
sama = 0
for i in tebakan:
if x == i:
sama += 1
if sama > 1:
self.result['text'] = 'Angka input tidak boleh sama!'
return
self.jumlah_percobaan += 1
angkaBenar = 0
posisiBenar = 0
# cek angka yang benar, jika ada maka +1
for x in self.jawaban:
angkaBenar += 1 if x in tebakan else 0
# cek angka yang posisinya benar, jika ada maka +1
for x in range(4):
posisiBenar += 1 if tebakan[x] == self.jawaban[x] else 0
if self.jumlah_percobaan >= 10:
self.result["text"] = 'Anda Gagal!!!\nGame direset'
self.reset_game()
return
elif angkaBenar == 4 and posisiBenar == 4:
self.result["text"] = "Selamat Anda benar!\nGame direset"
self.reset_game()
else:
self.result["text"] = "Coba lagi"
self.log["text"] += "\n[{}] {} {} {} {} > angka benar: {}, posisi benar: {}".format(self.jumlah_percobaan, tebakan[0], tebakan[1], tebakan[2], tebakan[3], angkaBenar, posisiBenar)
# Mulai aplikasi
root = Tk()
app = App(master=root)
app.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment