You are on page 1of 4

import tkinter as tk

from tkinter import simpledialog, messagebox


import random

class GameSelector:
def __init__(self, master):
self.master = master
self.master.title("Game Selector")

self.label = tk.Label(master, text="Select a game:")


self.label.pack(pady=10)

self.game_buttons = [
("Key Guessing", self.play_key_guessing),
("Tic Tac Toe", self.play_tic_tac_toe),
("Connect Four", self.play_connect_four)
]

for game_name, game_func in self.game_buttons:


button = tk.Button(master, text=game_name, command=game_func)
button.pack()

def play_key_guessing(self):
self.master.withdraw()

# Choose whether the secret key is selected randomly by the


computer or by the player
source = simpledialog.askstring("Key Guessing", "Select key
source (Computer/Player):").lower()
if source not in ['computer', 'player']:
messagebox.showinfo("Key Guessing", "Invalid choice. Please
choose 'Computer' or 'Player'.")
self.master.deiconify()
return

if source == 'computer':
secret_key = none
else:
secret_key = simpledialog.askinteger("Key Guessing", "Choose
a secret key:")
if secret_key is None:
self.master.deiconify() # Player canceled, go back to
the main menu
return

attempts = 3

while attempts > 0:


guess = simpledialog.askinteger("Key Guessing", "Guess the
key:")
if guess is not None:
if guess == secret_key:
messagebox.showinfo("Key Guessing", "Congratulations!
You guessed the key.")
break
elif guess < secret_key:
messagebox.showinfo("Key Guessing", "Wrong guess. The
key is higher. Try again.")
else:
messagebox.showinfo("Key Guessing", "Wrong guess. The
key is lower. Try again.")
attempts -= 1

if attempts == 0:
messagebox.showinfo("Key Guessing", f"You've run out of
attempts. The correct key was {secret_key}.")

self.master.deiconify()

def play_tic_tac_toe(self):
self.master.withdraw()
tic_tac_toe_game = TicTacToeGame(self.master)
tic_tac_toe_game.play()
self.master.deiconify()

def play_connect_four(self):
self.master.withdraw()
connect_four_game = ConnectFourGame(self.master)
connect_four_game.play()
self.master.deiconify()

class TicTacToeGame:
def __init__(self, master):
self.master = master
self.board = [" "] * 9
self.current_player = "X"

self.root = tk.Tk()
self.root.title("Tic-Tac-Toe")

self.buttons = []
for i in range(3):
for j in range(3):
button = tk.Button(self.root, text="", width=5, height=2,
command=lambda row=i, col=j:
self.make_move(row, col))
button.grid(row=i, column=j)
self.buttons.append(button)

exit_button = tk.Button(self.root, text="Exit",


command=self.exit_game)
exit_button.grid(row=3, columnspan=3, pady=10)

def make_move(self, row, col):


move = row * 3 + col
if self.board[move] == " ":
self.board[move] = self.current_player
self.buttons[move].config(text=self.current_player)
if self.check_winner():
messagebox.showinfo("Tic-Tac-Toe", f"Player
{self.current_player} wins!")
self.root.destroy()
elif " " not in self.board:
messagebox.showinfo("Tic-Tac-Toe", "It's a tie!")
self.root.destroy()
else:
self.current_player = "O" if self.current_player == "X"
else "X"

def check_winner(self):
for i in range(0, 9, 3):
if self.board[i] == self.board[i+1] == self.board[i+2] != "
":
return True
for i in range(3):
if self.board[i] == self.board[i+3] == self.board[i+6] != "
":
return True
if self.board[0] == self.board[4] == self.board[8] != " " or
self.board[2] == self.board[4] == self.board[6] != " ":
return True
return False

def exit_game(self):
self.root.destroy()
self.master.deiconify()

def play(self):
self.root.mainloop()

class ConnectFourGame:
def __init__(self, master):
self.master = master
self.rows = 6
self.cols = 7
self.board = [[' '] * self.cols for _ in range(self.rows)]
self.current_player = "X"

self.root = tk.Tk()
self.root.title("Connect Four")

self.buttons = []
for i in range(self.rows):
for j in range(self.cols):
button = tk.Button(self.root, text="", width=5, height=2,
command=lambda col=j:
self.make_move(col))
button.grid(row=i, column=j)
self.buttons.append(button)

exit_button = tk.Button(self.root, text="Exit",


command=self.exit_game)
exit_button.grid(row=self.rows, columnspan=self.cols, pady=10)

def make_move(self, col):


for row in range(self.rows - 1, -1, -1):
if self.board[row][col] == ' ':
self.board[row][col] = self.current_player
self.buttons[row * self.cols +
col].config(text=self.current_player)
if self.check_winner(row, col):
messagebox.showinfo("Connect Four", f"Player
{self.current_player} wins!")
self.root.destroy()
else:
self.current_player = "O" if self.current_player ==
"X" else "X"
break

def check_winner(self, row, col):


# Check for Connect Four in all directions
directions = [(1, 0), (0, 1), (1, 1), (1, -1)] # Down, Right,
Diagonal Right, Diagonal Left
for dr, dc in directions:
count = 1
for i in range(1, 4):
r, c = row + i * dr, col + i * dc
if 0 <= r < self.rows and 0 <= c < self.cols and
self.board[r][c] == self.current_player:
count += 1
else:
break
for i in range(1, 4):
r, c = row - i * dr, col - i * dc
if 0 <= r < self.rows and 0 <= c < self.cols and
self.board[r][c] == self.current_player:
count += 1
else:
break
if count >= 4:
return True
return False

def exit_game(self):
self.root.destroy()
self.master.deiconify()

def play(self):
self.root.mainloop()

if __name__ == "__main__":
master = tk.Tk()
game_selector = GameSelector(master)
master.mainloop()

You might also like