import pygame
import random
# Initialize Pygame
pygame.init()
# Constants
WIDTH, HEIGHT = 300, 600
GRID_SIZE = 30
GRID_WIDTH, GRID_HEIGHT = WIDTH // GRID_SIZE, HEIGHT // GRID_SIZE
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# Tetris shapes (represented as lists of (x, y) offsets)
SHAPES = [
[(0, 0), (-1, 0), (1, 0), (2, 0)], # I-shape
[(0, 0), (0, -1), (1, 0), (1, -1)], # O-shape
[(0, 0), (-1, 0), (1, 0), (1, -1)], # L-shape
[(0, 0), (-1, 0), (1, 0), (-1, -1)], # J-shape
[(0, 0), (-1, 0), (0, -1), (1, -1)], # S-shape
[(0, 0), (-1, 0), (0, -1), (1, 0)], # T-shape
[(0, 0), (-1, 0), (0, -1), (1, -1)] # Z-shape
]
# Colors for the shapes
SHAPE_COLORS = [
(0, 255, 255), # Cyan
(255, 255, 0), # Yellow
(255, 165, 0), # Orange
(0, 0, 255), # Blue
(0, 255, 0), # Green
(128, 0, 128), # Purple
(255, 0, 0) # Red
]
# Initialize the screen
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Eyebrow Tetris")
# Initialize game variables
grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
current_shape = None
current_color = None
shape_x, shape_y = 0, 0
# Function to create a new random shape
def new_shape():
global current_shape, current_color, shape_x, shape_y
shape_idx = random.randint(0, len(SHAPES) - 1)
current_shape = SHAPES[shape_idx]
current_color = SHAPE_COLORS[shape_idx]
shape_x = GRID_WIDTH // 2
shape_y = 0
# Function to check if a position is valid for the current shape
def is_valid_position():
for x, y in current_shape:
if shape_x + x < 0 or shape_x + x >= GRID_WIDTH or shape_y + y >= GRID_HEIGHT:
return False
if grid[shape_y + y][shape_x + x] != 0:
return False
return True
# Function to place the current shape in the grid
def place_shape():
for x, y in current_shape:
grid[shape_y + y][shape_x + x] = current_color
# Function to check and clear completed rows
def clear_rows():
global grid
full_rows = []
for y in range(GRID_HEIGHT):
if all(grid[y]):
full_rows.append(y)
for y in full_rows:
del grid[y]
grid.insert(0, [0] * GRID_WIDTH)
# Main game loop
clock = pygame.time.Clock()
game_over = False
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
shape_x -= 1
if not is_valid_position():
shape_x += 1
if event.key == pygame.K_RIGHT:
shape_x += 1
if not is_valid_position():
shape_x -= 1
if event.key == pygame.K_DOWN:
shape_y += 1
if not is_valid_position():
shape_y -= 1
# Move the shape down
shape_y += 1
if not is_valid_position():
shape_y -= 1
place_shape()
clear_rows()
new_shape()
# Clear the screen
screen.fill(WHITE)
# Draw the grid
for y in range(GRID_HEIGHT):
for x in range(GRID_WIDTH):
if grid[y][x] != 0:
pygame.draw.rect(screen, grid[y][x], (x * GRID_SIZE, y * GRID_SIZE, GRID_SIZE, GRID_SIZE))
# Draw the current shape
for x, y in current_shape:
pygame.draw.rect(screen, current_color, ((shape_x + x) * GRID_SIZE, (shape_y + y) * GRID_SIZE, GRID_SIZE, GRID_SIZE))
# Update the display
pygame.display.flip()
# Set the game's frame rate
clock.tick(5)
# Quit Pygame
pygame.quit()