Advertisement
afrizalwahyuadi66

Game Tebak Warna

May 18th, 2024
850
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.80 KB | Software | 0 0
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. import random
  4.  
  5. class MastermindGame:
  6.     def __init__(self, master):
  7.         # Inisialisasi permainan dengan jendela utama (master)
  8.         self.master = master
  9.         self.master.title("Mastermind Game")
  10.         self.master.geometry("400x350")
  11.  
  12.         # Dictionary untuk memetakan nomor warna ke namanya
  13.         self.colors = {
  14.             1: "Merah", 2: "Putih", 3: "Hitam", 4: "Kuning",
  15.             5: "Hijau", 6: "Biru", 7: "Coklat", 8: "Ungu",
  16.             9: "Pink", 10: "Cyan"
  17.         }
  18.  
  19.         # Menghasilkan kode rahasia acak dengan 4 warna
  20.         self.secret_code = [random.randint(1, 10) for _ in range(4)]
  21.        
  22.         # Jumlah percobaan yang diperbolehkan dan nilai percobaan saat ini
  23.         self.attempts_left = 5
  24.         self.current_attempt = [tk.IntVar(), tk.IntVar(), tk.IntVar(), tk.IntVar()]
  25.  
  26.         # Menyiapkan GUI
  27.         self.create_gui()
  28.  
  29.     def create_gui(self):
  30.         # Membuat komponen GUI permainan
  31.         self.create_guess_row()
  32.         self.create_input_rows()
  33.         self.create_feedback_area()
  34.  
  35.     def create_guess_row(self):
  36.         # Membuat baris tempat warna yang ditebak akan ditampilkan
  37.         guess_frame = tk.Frame(self.master)
  38.         guess_frame.pack(pady=10)
  39.  
  40.         # Label untuk mewakili setiap warna yang ditebak
  41.         self.guess_labels = []
  42.         for i in range(4):
  43.             label = tk.Label(guess_frame, text="?", width=5, height=2, bg="lightgray", relief="solid")
  44.             self.guess_labels.append(label)
  45.             label.grid(row=0, column=i, padx=5)
  46.  
  47.     def create_input_rows(self):
  48.         # Membuat baris untuk input pengguna (menebak)
  49.         input_frame = tk.Frame(self.master)
  50.         input_frame.pack(pady=5)
  51.  
  52.         # Widget Entry untuk memasukkan warna, dan tombol untuk mengirimkan tebakan
  53.         for i in range(4):
  54.             entry = tk.Entry(input_frame, textvariable=self.current_attempt[i], width=5)
  55.             entry.grid(row=0, column=i, padx=5)
  56.  
  57.         guess_button = tk.Button(input_frame, text="Tebak", command=self.check_guess)
  58.         guess_button.grid(row=0, column=4, padx=5)
  59.  
  60.     def create_feedback_area(self):
  61.         # Membuat area untuk menampilkan umpan balik, kesempatan tersisa, dan informasi warna
  62.         feedback_frame = tk.Frame(self.master)
  63.         feedback_frame.pack(pady=10)
  64.  
  65.         # Label untuk umpan balik, kesempatan tersisa, dan informasi warna
  66.         self.feedback_label = tk.Label(feedback_frame, text="Umpan Balik: ")
  67.         self.feedback_label.pack()
  68.  
  69.         self.chances_label = tk.Label(feedback_frame, text=f"Kesempatan: {self.attempts_left}")
  70.         self.chances_label.pack()
  71.  
  72.         info_label_1 = tk.Label(feedback_frame, text="1=Merah, 2=Putih, 3=Hitam, 4=Kuning, 5=Hijau,")
  73.         info_label_1.pack()
  74.  
  75.         info_label_2 = tk.Label(feedback_frame, text="6=Biru, 7=Coklat, 8=Ungu, 9=Pink, 10=Cyan")
  76.         info_label_2.pack()
  77.  
  78.     def check_guess(self):
  79.         # Memeriksa tebakan pengguna terhadap kode rahasia
  80.         guess = [var.get() for var in self.current_attempt]
  81.         correct_positions = sum([1 for i in range(4) if guess[i] == self.secret_code[i]])
  82.        
  83.         # Memeriksa apakah semua posisi benar, jika ya, akhiri permainan
  84.         if correct_positions == 4:
  85.             self.end_game("100% benar. Anda berhasil menebak semua warna.")
  86.         else:
  87.             # Mengurangi percobaan dan memperbarui GUI
  88.             self.attempts_left -= 1
  89.             if self.attempts_left == 0:
  90.                 # Jika tidak ada percobaan lagi, akhiri permainan
  91.                 self.end_game("Anda kehabisan kesempatan. Game direset.")
  92.             else:
  93.                 # Memperbarui warna yang ditebak, umpan balik, dan kesempatan tersisa
  94.                 self.update_guess_labels(guess, correct_positions)
  95.                 self.update_feedback(correct_positions)
  96.                 self.update_chances()
  97.  
  98.     def update_guess_labels(self, guess, correct_positions):
  99.         # Memperbarui warna yang ditebak berdasarkan posisi yang benar
  100.         for i, label in enumerate(self.guess_labels):
  101.             if guess[i] == self.secret_code[i]:
  102.                 label.config(text=self.colors[guess[i]], bg="lightgray")
  103.             elif guess[i] in self.secret_code:
  104.                 label.config(text="?", bg="white")
  105.             else:
  106.                 label.config(text="?", bg="lightgray")
  107.  
  108.     def update_feedback(self, correct_positions):
  109.         # Memperbarui label umpan balik berdasarkan jumlah posisi yang benar
  110.         percentage = (correct_positions / 4) * 100
  111.         self.feedback_label.config(text=f"{correct_positions} warna benar. Coba lagi!")
  112.  
  113.     def update_chances(self):
  114.         # Memperbarui label kesempatan tersisa
  115.         self.chances_label.config(text=f"Kesempatan: {self.attempts_left}")
  116.  
  117.     def end_game(self, message):
  118.         # Mengakhiri permainan dan menampilkan kotak pesan dengan kode yang benar
  119.         correct_code = [self.colors[color] for color in self.secret_code]
  120.         messagebox.showinfo("Game Over", f"{message}\nJawaban yang benar: {correct_code}")
  121.         self.reset_game()
  122.  
  123.     def reset_game(self):
  124.         # Mereset permainan dengan menghasilkan kode rahasia baru dan mereset percobaan
  125.         self.secret_code = [random.randint(1, 10) for _ in range(4)]
  126.         self.attempts_left = 5
  127.  
  128.         # Mereset elemen GUI
  129.         for label in self.guess_labels:
  130.             label.config(text="?", bg="lightgray")
  131.  
  132.         self.feedback_label.config(text="Umpan Balik: ")
  133.         self.chances_label.config(text=f"Kesempatan: {self.attempts_left}")
  134.  
  135.         for var in self.current_attempt:
  136.             var.set(0)
  137.  
  138. if __name__ == "__main__":
  139.     # Membuat jendela utama dan memulai permainan
  140.     root = tk.Tk()
  141.     game = MastermindGame(root)
  142.     root.mainloop()
  143.  
Tags: game
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement