Last active
November 1, 2023 15:32
-
-
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…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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