└── tetris /tetris: -------------------------------------------------------------------------------- 1 | import random 2 | import tkinter as tk 3 | 4 | class TetrisGame(tk.Tk): 5 | def __init__(self): 6 | super().__init__() 7 | self.title("Тетрис") 8 | self.board = [[0] * 10 for _ in range(20)] 9 | self.score = 0 10 | self.level = 1 11 | self.create_widgets() 12 | self.new_game() 13 | 14 | def create_widgets(self): 15 | self.canvas = tk.Canvas(self, width=400, height=400, bg='black') 16 | self.canvas.pack() 17 | self.next_piece_canvas = tk.Canvas(self, width=100, height=100, bg='black') 18 | self.next_piece_canvas.pack() 19 | self.score_label = tk.Label(self, text=f"Счет: {self.score}", font=('Helvetica', 14)) 20 | self.score_label.pack() 21 | self.level_label = tk.Label(self, text=f"Уровень: {self.level}", {self.level}", font=('Helvetica', 14)) 22 | self.level_label.pack() 23 | 24 | def new_game(self): 25 | self.score = 0 26 | self.level = 1 27 | self.generate_new_piece() 28 | self.drop_piece() 29 | 30 | def generate_new_piece(self): 31 | self.piece = [[0] * 4 for _ in range(4)] 32 | for i in range(4): 33 | for j in range(4): 34 | if random.randint(0, 3) == 0: 35 | self.piece[i][3 - j] = 1 36 | self.canvas.delete('all') 37 | self.draw_next_piece() 38 | 39 | def draw_next_piece(self): 40 | for i in range(4): 41 | for j in range(4): 42 | if self.piece[i][j] == 1: 43 | x = 30 * (i % 2) + 15 * (j % 2) 44 | y = 30 * (i // 2) + 15 * (j // 2) 45 | self.next_piece_canvas.create_rectangle(x, y, x + 30, y + 30, fill='green') 46 | 47 | def draw_piece(self): 48 | for i in range(4): 49 | for j in range(4): 50 | if self.piece[i][j] == 1: 51 | x = self.piece_position[0] + i 52 | y = self.piece_position[1] - j 53 | self.canvas.create_rectangle(x, y, x + 1, y + 1, fill='green') 54 | 55 | def drop_piece(self): 56 | self.piece_position = [0, 0] 57 | self.draw_piece() 58 | self.canvas.after(100, self.check_collision) 59 | 60 | def check_collision(self): 61 | for i in range(4): 62 | for j in range(4): 63 | if self.piece[i][j] == 1: 64 | x = self.piece_position[0] + i 65 | y = self.piece_position[1] - j 66 | if y < 0 or y >= 20 or x < 0 or x >= 10 or self.board[y][x] == 1: 67 | self.game_over() 68 | return 69 | self.board[self.piece_position[1]][self.piece_position[0]] = 1 70 | self.draw_piece() 71 | self.score += 1 72 | self.score_label.config(text=f"Счет: {self.score}") 73 | self.canvas.after(100, self.move_down) 74 | 75 | def game_over(self): 76 | self.canvas.delete('all') 77 | self.canvas.create_text(200, 150, text="Игра окончена!", fill='red', 78 | Ответ 79 | --------------------------------------------------------------------------------