0% found this document useful (0 votes)
86 views5 pages

Complete Python Tkinter Game Arcade

Uploaded by

kishore080611
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
86 views5 pages

Complete Python Tkinter Game Arcade

Uploaded by

kishore080611
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Python Tkinter Game Arcade (Complete - 4 Games)

# [Link]
# Python 3.x - Tkinter Game Arcade for Grade 12 CS
# Contains: Main Menu + Tic-Tac-Toe + Snake + Memory Match + Brick Breaker
# Save as [Link] and run: python [Link]

import tkinter as tk
from tkinter import messagebox
import random
import time
import os
import json

# Utility: persistent high scores


SCORES_FILE = "high_scores.json"

def load_scores():
try:
with open(SCORES_FILE, "r") as f:
return [Link](f)
except Exception:
return {}

def save_score(game_name, score):


scores = load_scores()
best = [Link](game_name, 0)
# For Memory 'best' is least moves, so check separately if needed.
if game_name == "Memory":
# lower is better; save if best==0 or score < best
if best == 0 or score < best:
scores[game_name] = score
else:
if score > best:
scores[game_name] = score
with open(SCORES_FILE, "w") as f:
[Link](scores, f)

def get_best(game_name):
return load_scores().get(game_name, 0)

# MAIN MENU
class MainMenu:
def __init__(self, root):
[Link] = root
[Link]("Python Game Arcade")
[Link]("520x520")
[Link](bg="#F0F8FF")
[Link](False, False)

[Link](root, text="Python Game Arcade", font=("Segoe UI", 26, "bold"),


bg="#F0F8FF").pack(pady=20)
btn_frame = [Link](root, bg="#F0F8FF")
btn_frame.pack(pady=8)

[Link](btn_frame, text="Tic-Tac-Toe", font=("Segoe UI", 14),


width=20, command=self.open_tictactoe).grid(row=0, column=0, pady=8)
[Link](btn_frame, text="Snake Game", font=("Segoe UI", 14),
width=20, command=self.open_snake).grid(row=1, column=0, pady=8)
[Link](btn_frame, text="Memory Match", font=("Segoe UI", 14),
width=20, command=self.open_memory).grid(row=2, column=0, pady=8)
[Link](btn_frame, text="Brick Breaker", font=("Segoe UI", 14),
width=20, command=self.open_brick_breaker).grid(row=3, column=0,
pady=8)

[Link](root, text="Exit", font=("Segoe UI", 12), bg="#d9534f", fg="white",


width=12, command=[Link]).pack(pady=30)

scores = load_scores()
info = "High Scores:\\n"
info += "TicTacToe: {} ".format([Link]('TicTacToe', 'N/A'))
info += "Snake: {} ".format([Link]('Snake', 'N/A'))
info += "Memory: {} ".format([Link]('Memory', 'N/A'))
info += "Brick: {}".format([Link]('Brick', 'N/A'))
[Link](root, text=info, bg="#F0F8FF", font=("Segoe UI",
10)).pack(side="bottom", pady=12)

def open_tictactoe(self):
TicTacToe([Link])

def open_snake(self):
SnakeGame([Link])

def open_memory(self):
MemoryMatch([Link])

def open_brick_breaker(self):
BrickBreaker([Link])

# TIC-TAC-TOE (2-player)
class TicTacToe:
def __init__(self, parent):
[Link] = [Link](parent)
[Link]("Tic-Tac-Toe")
[Link]("360x420")
[Link](False, False)

self.current_player = "X"
[Link] = [["" for _ in range(3)] for _ in range(3)]
[Link] = [[None]*3 for _ in range(3)]

[Link]([Link], text="Tic-Tac-Toe", font=("Segoe UI", 18,


"bold")).pack(pady=8)

[Link] = [Link]([Link])
[Link]()

for r in range(3):
for c in range(3):
b = [Link]([Link], text="", width=6, height=3,
font=("Segoe UI", 20),
command=lambda rr=r, cc=c: self.on_click(rr, cc))
[Link](row=r, column=c, padx=5, pady=5)
[Link][r][c] = b

self.status_label = [Link]([Link], text="Player X's turn", font=("Segoe UI",


11))
self.status_label.pack(pady=8)

ctrl = [Link]([Link])
[Link](pady=6)
[Link](ctrl, text="Restart", width=10, command=[Link]).grid(row=0,
column=0, padx=6)
[Link](ctrl, text="Close", width=10, command=[Link]).grid(row=0,
column=1, padx=6)

def on_click(self, r, c):


if [Link][r][c] != "":
return
[Link][r][c] = self.current_player
[Link][r][c].config(text=self.current_player, state="disabled")

winner = self.check_winner()
if winner:
self.end_game(winner)
save_score("TicTacToe", 1) # store a dummy score for completion
return

if all([Link][i][j] != "" for i in range(3) for j in range(3)):


self.end_game("Draw")
return

self.current_player = "O" if self.current_player == "X" else "X"


self.status_label.config(text=f"Player {self.current_player}'s turn")

def check_winner(self):
b = [Link]
for i in range(3):
if b[i][0] == b[i][1] == b[i][2] != "":
return b[i][0]
if b[0][i] == b[1][i] == b[2][i] != "":
return b[0][i]
if b[0][0] == b[1][1] == b[2][2] != "":
return b[0][0]
if b[0][2] == b[1][1] == b[2][0] != "":
return b[0][2]
return None

def end_game(self, winner):


if winner == "Draw":
msg = "It's a draw!"
else:
msg = "Player {} wins!".format(winner)
[Link]("Game Over", msg)
for r in range(3):
for c in range(3):
[Link][r][c].config(state="disabled")
self.status_label.config(text=msg)

def restart(self):
self.current_player = "X"
[Link] = [["" for _ in range(3)] for _ in range(3)]
for r in range(3):
for c in range(3):
[Link][r][c].config(text="", state="normal")
self.status_label.config(text="Player X's turn")

# SNAKE GAME
class SnakeGame:
def __init__(self, parent):
[Link] = [Link](parent)
[Link]("Snake")
[Link]("520x540")
[Link](False, False)

self.W = 480
self.H = 420
self.cell_size = 20
[Link] = 120 # ms per step, smaller -> faster
[Link] = "Right"
[Link] = True
[Link] = 0

[Link]([Link], text="Snake Game", font=("Segoe UI", 16,


"bold")).pack(pady=6)
top_frame = [Link]([Link])
top_frame.pack()
self.score_label = [Link](top_frame, text="Score: 0", font=("Segoe UI", 12))
self.score_label.pack(side="left", padx=8)
best = get_best("Snake")
self.best_label = [Link](top_frame, text=f"Best: {best}", font=("Segoe UI",
12))
self.best_label.pack(side="left", padx=8)

[Link] = [Link]([Link], width=self.W, height=self.H, bg="black")


[Link](pady=8)
ctrl = [Link]([Link])
[Link]()
[Link](ctrl, text="Restart", width=10, command=[Link]).grid(row=0,
column=0, padx=6)
[Link](ctrl, text="Quit", width=10, command=[Link]).grid(row=0,
column=1, padx=6)
mid_x = (self.W // self.cell_size) // 2
mid_y = (self.H // self.cell_size) // 2
[Link] = [(mid_x, mid_y), (mid_x-1, mid_y), (mid_x-2, mid_y)]
self.spawn_food()
[Link]()
[Link]("<Key>", self.on_key)
self.after_id = None
[Link]()

def spawn_food(self):
max_x = (self.W // self.cell_size) - 1
max_y = (self.H // self.cell_size) - 1
while True:
fx = [Link](0, max_x)
fy = [Link](0, max_y)
if (fx, fy) not in [Link]:
[Link] = (fx, fy)
break

# Truncated for PDF brevity... (full code continues)

You might also like