Питон тетрис



import pygame

import random

# Инициализация pygame

pygame.init()

# Цвета

black = (0, 0, 0)

white = (255, 255, 255)

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

]

# Размеры окна

width = 1000 # Увеличили ширину окна для отображения счета

height = 900

# Размер блока

block_size = 50

# Создание окна

game_window = pygame.display.set_mode((width, height))

pygame.display.set_caption('Тетрис')

# Шрифт для отображения счета

font = pygame.font.SysFont(None, 40)

# Часы для управления FPS

clock = pygame.time.Clock()

# Игровое поле

grid = [[black for _ in range((width - 100) // block_size)] for _ in range(height // block_size)] # Уменьшили ширину сетки для счета

# Фигуры и их вращения

shapes = [

[[1, 1, 1, 1]], # I

[[1, 1, 1], [0, 1, 0]], # T

[[1, 1], [1, 1]], # O

[[1, 1, 0], [0, 1, 1]], # Z

[[0, 1, 1], [1, 1, 0]], # S

[[1, 1, 1], [1, 0, 0]], # L

[[1, 1, 1], [0, 0, 1]] # J

]

# Класс для фигур

class Piece:

def __init__(self, shape):

self.shape = shape

self.color = random.choice(colors)

self.x = (width - 100) // block_size // 2 - len(shape[0]) // 2 # Учитываем новую ширину сетки

self.y = 0

# Функция для создания новой фигуры

def new_piece():

return Piece(random.choice(shapes))

# Функция для отрисовки сетки

def draw_grid():

for y in range(len(grid)):

for x in range(len(grid[y])):

pygame.draw.rect(game_window, grid[y][x], (x * block_size, y * block_size, block_size, block_size), 0)

for y in range(len(grid)):

pygame.draw.line(game_window, white, (0, y * block_size), ((width - 100), y * block_size)) # Учитываем новую ширину сетки

for x in range(len(grid[0])):

pygame.draw.line(game_window, white, (x * block_size, 0), (x * block_size, height))

# Функция для отрисовки фигуры

def draw_piece(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

pygame.draw.rect(game_window, piece.color, ((piece.x + x) * block_size, (piece.y + y) * block_size, block_size, block_size), 0)

# Функция для проверки столкновений

def check_collision(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

if piece.y + y >= len(grid) or piece.x + x < 0 or piece.x + x >= len(grid[0]) or grid[piece.y + y][piece.x + x] != black:

return True

return False

# Функция для фиксации фигуры на поле

def fix_piece(piece):

for y, row in enumerate(piece.shape):

for x, cell in enumerate(row):

if cell:

grid[piece.y + y][piece.x + x] = piece.color

# Функция для удаления заполненных строк

def clear_lines():

lines_cleared = 0

for y in range(len(grid) - 1, -1, -1):

if black not in grid[y]:

lines_cleared += 1

del grid[y]

grid.insert(0, [black for _ in range(len(grid[0]))])

return lines_cleared

# Основной игровой цикл

def game_loop():

global grid

piece = new_piece()

fall_time = 0

fall_speed = 0.5

score = 0

running = True

while running:

fall_time += clock.get_rawtime()

clock.tick()

if fall_time / 1000 >= fall_speed:

fall_time = 0

piece.y += 1

if check_collision(piece):

piece.y -= 1

fix_piece(piece)

lines_cleared = clear_lines()

score += lines_cleared * 100

piece = new_piece()

if check_collision(piece):

running = False

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT:

piece.x -= 1

if check_collision(piece):

piece.x += 1

if event.key == pygame.K_RIGHT:

piece.x += 1

if check_collision(piece):

piece.x -= 1

if event.key == pygame.K_DOWN:

piece.y += 1

if check_collision(piece):

piece.y -= 1

if event.key == pygame.K_UP:

rotated_piece = list(zip(*reversed(piece.shape)))

if not check_collision(Piece(rotated_piece)):

piece.shape = rotated_piece

game_window.fill(black)

draw_grid()

draw_piece(piece)

# Отрисовка счета

score_text = font.render(f'Score: {score}', True, white)

game_window.blit(score_text, (width - 150, 50)) # Позиция счета справа от сетки

pygame.display.update()

pygame.quit()

quit()

# Запуск игры

game_loop()

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества