ππΉοΈπΈ Python + Pygame = Amazing Frogs: ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΡΡΡΡΡ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΡ
ΠΠΎΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ³ΡΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ ΠΎΡΠΎΡΠ²Π΅ΡΡΡΡ? ΠΠ°Π²Π°ΠΉ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Amazing Frogs β ΡΠ±ΠΈΠΉΡΡ Π’Π΅ΡΡΠΈΡΠ° Π½Π° Python! Π’ΡΡ ΡΠ΅Π±Π΅ ΠΈ ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΈ Π²Π·ΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΡΠ²Π΅ΡΠ°, ΠΈ Ρ ΠΈΡΡΠ°Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠ°. ΠΠ°ΠΏΠ°ΡΠ°ΠΉΡΡ ΠΊΠΎΡΠ΅, ΠΎΡΠΊΡΡΠ²Π°ΠΉ IDE, ΠΈ ΠΏΠΎΠ΅Ρ Π°Π»ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ΄ Π² ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ Π±Π΅Π·ΡΠΌΠΈΠ΅!
ΠΠΎΠ³ΠΈΠΊΠ° ΠΈΠ³ΡΡ
Amazing Frogs β ΠΊΠ»ΠΎΠ½ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ Π²ΠΈΠ½ΡΠ°ΠΆΠ½ΠΎΠΉ ΠΈΠ³ΡΡ Amazing Blocks:
Amazing Blocks β Π»ΡΠ±ΠΎΠΏΡΡΠ½ΡΠΉ ΠΊΡΠΎΡΡΠΎΠ²Π΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π»Π΅Π³Π΅Π½Π΄Π°ΡΠ½ΡΠΌ ΠΏΡΠ°ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ Π²ΡΠ΅Ρ Π±Π»ΠΎΡΠ½ΡΡ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΎΠΊ Π’Π΅ΡΡΠΈΡΠΎΠΌ ΠΈ ΠΆΠ°Π½ΡΠΎΠΌ Β«Π’ΡΠΈ Π² ΡΡΠ΄Β»:
- Π€ΠΈΠ³ΡΡΡ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΡΡΠΈΠΌΠΈΠ½ΠΎ) Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΡΡΠ΅Ρ (ΡΠ΅ΡΡΠ°ΠΌΠΈΠ½ΠΎ).
- Π’ΡΠΈΠΌΠΈΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠΈ β Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ²Π΅ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΡΠΎΡΡΠΎΡΡ. ΠΡΠ²Π°ΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΡΠΈΠΌΠΈΠ½ΠΎ.
- ΠΠ»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΎΡ ΡΡΠΈΠΌΠΈΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ. ΠΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ ΡΠΈΠ³ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.
- ΠΠΌΠ΅ΡΡΠΎ ΡΠ³ΠΎΡΠ°Π½ΠΈΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ Π»ΠΈΠ½ΠΈΠΉ ΡΠ³ΠΎΡΠ°ΡΡ ΠΎΠΊΠ°Π·Π°Π²ΡΠΈΠ΅ΡΡ ΠΏΠΎ ΡΠΎΡΠ΅Π΄ΡΡΠ²Ρ 3 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΎΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ, Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΈ ΠΎΠ±Π΅ΠΈΠΌ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠΌ (ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ ΠΈ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ).
ΠΡΡΠ°Π»ΡΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Amazing Frogs ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°:
- ΠΡΠΈ Π½Π°Π±ΠΎΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΡ 20 ΠΎΡΠΊΠΎΠ² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΠΈΠ³ΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ.
- ΠΠ³ΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠ³ΡΡΠ΅ Π½Π΅ΠΊΡΠ΄Π° ΠΏΠ°Π΄Π°ΡΡ.
- ΠΠ°ΠΆΠ°ΡΠΈΠ΅ β ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΡΠΈΠΌΠΈΠ½ΠΎ Π²Π½ΠΈΠ·, ΠΏΡΠΎΠ±Π΅Π» ΡΡΠ°Π²ΠΈΡ ΠΈΠ³ΡΡ Π½Π° ΠΏΠ°ΡΠ·Ρ, Π° Esc ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΡ ΠΎΠ΄Ρ.
ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
ΠΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ 450x600, Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠΊΡ 6x12 ΠΊΠ»Π΅ΡΠΎΠΊ. ΠΠ»ΠΎΠΊΠΈ ΡΡΠΈΠΌΠΈΠ½ΠΎ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Π΄Π²ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² 50Ρ 50, ΡΠ»Π΅Π³ΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΠΈΡ ΡΡ ΠΏΠΎ ΡΡΠΊΠΎΡΡΠΈ (Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 2,5-ΡΡΡΠ΅ΠΊΡΠ°), ΠΈ ΠΏΠΎΠ»ΡΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ³ΠΎ png-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° 20Ρ 20 Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ:
import pygame import random pygame.init() WIDTH, HEIGHT = 450, 600 CELL_SIZE = 50 GRID_WIDTH = 6 GRID_HEIGHT = 12 COLORS = [(0, 0, 225), (0, 225, 0), (225, 0, 0), (225, 225, 0)] LIGHT_COLORS = [(30, 30, 255), (50, 255, 50), (255, 30, 30), (255, 255, 30)] png_image = pygame.image.load('frog.png') png_image = pygame.transform.smoothscale(png_image, (20, 20)) png_image.set_alpha(128) screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Amazing Frogs")
ΠΠ»Π°ΡΡΡ Block ΠΈ Trimino
ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ β ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ³ΡΡ: Block ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ², Π° Trimino ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΡΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² ΡΠΈΠ³ΡΡ β ΡΡΠΈΠΌΠΈΠ½ΠΎ.
Block ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ Π±Π»ΠΎΠΊΠΎΠ², Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ (Π²ΠΏΡΠ°Π²ΠΎ/Π²Π»Π΅Π²ΠΎ) ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² (ΠΊΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΈΠΌΠΈΠ½ΠΎ):
class Block: def __init__(self, x, y, color): self.x = x self.y = y self.color = color self.stopped = False def fall(self): if not self.stopped: self.y += 1 def move_left(self, grid): if not self.stopped and self.x > 0 and not grid[self.y][self.x - 1]: self.x -= 1 def move_right(self, grid): if not self.stopped and self.x < GRID_WIDTH - 1 and not grid[self.y][self.x + 1]: self.x += 1 def draw(self, screen): color_index = COLORS.index(self.color) light_color = LIGHT_COLORS[color_index] pygame.draw.rect(screen, self.color, (self.x * CELL_SIZE + 1, self.y * CELL_SIZE + 1, CELL_SIZE - 1, CELL_SIZE - 1), 0, 3) pygame.draw.rect(screen, light_color, (self.x * CELL_SIZE + 3, self.y * CELL_SIZE + 3, CELL_SIZE - 6, CELL_SIZE - 6), 0, 3) png_pos = (self.x * CELL_SIZE + (CELL_SIZE // 2 - 10), self.y * CELL_SIZE + (CELL_SIZE // 2 - 10)) screen.blit(png_image, png_pos)
Trimino ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΠΌΠΈΠ½ΠΎ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ²Π΅ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΎΠ², ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΎΠ² ΡΡΠ°Π·Ρ (ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ³ΡΡΡ), ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠΊΡΠ°ΡΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π½Π΅ΡΠ½Π΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΠΈΠ³ΡΡΡ:
class Trimino: def __init__(self): self.blocks = [ Block(GRID_WIDTH // 2 - 1, 0, random.choice(COLORS)), Block(GRID_WIDTH // 2, 0, random.choice(COLORS)), Block(GRID_WIDTH // 2 + 1, 0, random.choice(COLORS)), ] def rotate_colors(self): colors = [block.color for block in self.blocks] colors = [colors[-1]] + colors[:-1] for i in range(3): self.blocks[i].color = colors[i] def fall(self): for block in self.blocks: block.fall() def move_left(self, grid): if all(block.x > 0 and not grid[block.y][block.x - 1] for block in self.blocks): for block in self.blocks: block.move_left(grid) def move_right(self, grid): if all(block.x < GRID_WIDTH - 1 and not grid[block.y][block.x + 1] for block in self.blocks): for block in self.blocks: block.move_right(grid) def drop_down(self, grid): while all(not block.stopped and not self.check_collision(block, grid) for block in self.blocks): self.fall() def check_collision(self, block, grid): if block.y >= GRID_HEIGHT - 1: return True if grid[block.y + 1][block.x]: return True return False def draw(self, screen): for block in self.blocks: block.draw(screen)
ΠΠ±Π° ΠΊΠ»Π°ΡΡΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ ΡΠ΅ΡΠΊΠΎΠΉ (grid), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² Π½Π° ΠΏΠΎΠ»Π΅. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ) ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡΠ°Π²ΠΎ.
ΠΠΊΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΠ³ΡΡ
ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠ³ΡΡΠ΅ Π½Π΅ΠΊΡΠ΄Π° ΠΏΠ°Π΄Π°ΡΡ, ΠΈΠ³ΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ: Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ β Β«ΠΠΎΠ²Π°Ρ ΠΈΠ³ΡΠ°Β» ΠΈ Β«ΠΡΠΉΡΠΈΒ». ΠΠ° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΠΊΠ»ΠΈΠΊΠΈ ΠΏΠΎ Π½ΠΈΠΌ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡ Button:
class Button: def __init__(self, x, y, width, height, text, color, text_color): self.rect = pygame.Rect(x, y, width, height) self.text = text self.color = color self.text_color = text_color self.font = pygame.font.Font('MOSCOW2024.otf', 16) def draw(self, screen): pygame.draw.rect(screen, self.color, self.rect) text_surface = self.font.render(self.text, True, self.text_color) text_rect = text_surface.get_rect(center=self.rect.center) screen.blit(text_surface, text_rect) def is_clicked(self, pos): return self.rect.collidepoint(pos)
ΠΠ»Π°ΡΡ Game
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ³ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΈΠΌΠΈΠ½ΠΎ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ ΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Game:
- reset_game β ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΠ³ΡΡ Π΄ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΠ΅ΡΠΊΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΈΠΌΠΈΠ½ΠΎ, ΠΎΠ±Π½ΡΠ»ΡΠ΅Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
- check_collision β ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Π»ΠΈ Π±Π»ΠΎΠΊ Ρ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊ Π΄ΠΎΡΡΠΈΠ³ Π½ΠΈΠ·Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π½ΠΈΠΌ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π±Π»ΠΎΠΊ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
True
. - lock_trimino β ΠΊΠΎΠ³Π΄Π° ΡΡΠΈΠΌΠΈΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ, Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈ ΡΠΈΠΊΡΠΈΡΡΡΡΡΡ Π² ΡΠ΅ΡΠΊΠ΅, ΡΠΎ Π΅ΡΡΡ ΡΠ²Π΅Ρ Π±Π»ΠΎΠΊΠΎΠ² ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ grid. ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ (ΠΌΠ΅ΡΠΎΠ΄ check_lines), ΠΈ Π΅ΡΠ»ΠΈ Π² Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΡΠ΄Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈ, ΠΈΠ³ΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ.
- draw_next_trimino β ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΠ³ΡΡΡ Π² ΠΏΠ°Π½Π΅Π»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΡΠΏΡΠ°Π²Π°.
- find_matches β ΠΈΡΠ΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ² Π² ΡΠ΅ΡΠΊΠ΅ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ, Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΈ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠΌ (Π΅ΡΠ»ΠΈ ΡΡΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° ΡΡΠΎΡΡ ΡΡΠ΄ΠΎΠΌ).
- remove_matches β ΡΠ΄Π°Π»ΡΠ΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΈΠ· ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ΄Π²ΠΈΠ³Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈ Π²ΡΡΠ΅ Π²Π½ΠΈΠ·, Π·Π°ΠΏΠΎΠ»Π½ΡΡ ΠΏΡΡΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°.
- level_up β ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ³ΡΡ, Π΅ΡΠ»ΠΈ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ².
- update β ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³ΡΡ, Π·Π°ΡΡΠ°Π²Π»ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΈΠΌΠΈΠ½ΠΎ ΠΏΠ°Π΄Π°ΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΡΠΈΠΌΠΈΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ, ΠΎΠ½ΠΈ ΡΠΈΠΊΡΠΈΡΡΡΡΡΡ Π½Π° ΠΏΠΎΠ»Π΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π»ΠΈΠ½ΠΈΠΈ (check_lines) Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ 3 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΡΠ΄ΠΎΠΌ.
- draw β ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΈΠΌΠΈΠ½ΠΎ ΠΈ Π²ΡΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Π½Π° ΡΠ΅ΡΠΊΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ (ΡΡΠ΅Ρ, ΡΡΠΎΠ²Π΅Π½Ρ) ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΈΠΌΠΈΠ½ΠΎ, Π° Π΅ΡΠ»ΠΈ ΠΈΠ³ΡΠ° ΠΎΠΊΠΎΠ½ΡΠ΅Π½Π°, Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΎΠΊΠ½ΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Β«ΠΠΎΠ²Π°Ρ ΠΈΠ³ΡΠ°Β» ΠΈ Β«ΠΡΠΉΡΠΈΒ».
class Game: def __init__(self): self.reset_game() self.font = pygame.font.Font('MOSCOW2024.otf', 15) self.font_color = (255, 255, 255) self.restart_button = Button(WIDTH // 2 - 105, HEIGHT // 2 + 50, 130, 40, "ΠΠΎΠ²Π°Ρ ΠΈΠ³ΡΠ°", (0, 255, 0), (0, 0, 0)) self.exit_button = Button(WIDTH // 2 + 45, HEIGHT // 2 + 50, 80, 40, "ΠΡΠΉΡΠΈ", (255, 0, 0), (255, 255, 255)) def reset_game(self): self.grid = [[None for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)] self.current_trimino = Trimino() self.next_trimino = Trimino() self.game_over = False self.fall_time = 0 self.fall_speed = 500 self.score = 0 self.level = 1 self.blocks_burned = 0 def check_collision(self, block): if block.y >= GRID_HEIGHT - 1: return True if self.grid[block.y + 1][block.x]: return True return False def lock_trimino(self): for block in self.current_trimino.blocks: self.grid[block.y][block.x] = block.color self.check_lines() if any(self.grid[0][x] is not None for x in range(GRID_WIDTH)): self.game_over = True else: self.current_trimino = self.next_trimino self.next_trimino = Trimino() def draw_next_trimino(self, screen): next_area_x = WIDTH - 140 next_area_y = 280 for i, block in enumerate(self.next_trimino.blocks): original_x, original_y = block.x, block.y block.x = (next_area_x // CELL_SIZE) + i block.y = next_area_y // CELL_SIZE + 1 block.draw(screen) block.x, block.y = original_x, original_y def find_matches(self): to_remove = set() for y in range(GRID_HEIGHT): for x in range(GRID_WIDTH - 2): if self.grid[y][x] and self.grid[y][x] == self.grid[y][x + 1] == self.grid[y][x + 2]: to_remove.update([(y, x), (y, x + 1), (y, x + 2)]) for x in range(GRID_WIDTH): for y in range(GRID_HEIGHT - 2): if self.grid[y][x] and self.grid[y][x] == self.grid[y + 1][x] == self.grid[y + 2][x]: to_remove.update([(y, x), (y + 1, x), (y + 2, x)]) for y in range(GRID_HEIGHT - 2): for x in range(GRID_WIDTH - 2): if self.grid[y][x] and self.grid[y][x] == self.grid[y + 1][x + 1] == self.grid[y + 2][x + 2]: to_remove.update([(y, x), (y + 1, x + 1), (y + 2, x + 2)]) if self.grid[y][x + 2] and self.grid[y][x + 2] == self.grid[y + 1][x + 1] == self.grid[y + 2][x]: to_remove.update([(y, x + 2), (y + 1, x + 1), (y + 2, x)]) return to_remove def remove_matches(self, to_remove): for x in range(GRID_WIDTH): col_blocks = [(y, x) for y, cx in to_remove if cx == x] col_blocks.sort(reverse=True) for y, _ in col_blocks: for row in range(y, 0, -1): self.grid[row][x] = self.grid[row - 1][x] self.grid[0][x] = None burned_blocks = len(to_remove) self.blocks_burned += burned_blocks self.score += burned_blocks if self.blocks_burned >= 20: self.level_up() def level_up(self): self.level += 1 self.blocks_burned = 0 self.fall_speed = max(100, self.fall_speed - 50) def check_lines(self): to_remove = self.find_matches() while to_remove: self.remove_matches(to_remove) to_remove = self.find_matches() def update(self): if self.game_over: return current_time = pygame.time.get_ticks() if current_time - self.fall_time > self.fall_speed: self.fall_time = current_time for block in self.current_trimino.blocks: if not block.stopped and self.check_collision(block): block.stopped = True if all(block.stopped for block in self.current_trimino.blocks): self.lock_trimino() self.check_lines() else: self.current_trimino.fall() def draw(self, screen): if not self.game_over: self.current_trimino.draw(screen) for y in range(GRID_HEIGHT): for x in range(GRID_WIDTH): if self.grid[y][x]: block = Block(x, y, self.grid[y][x]) block.draw(screen) stats_background_color = (50, 50, 50) stats_rect = pygame.Rect(WIDTH - 150, 0, 150, HEIGHT) pygame.draw.rect(screen, stats_background_color, stats_rect) score_text = self.font.render(f"Π‘ΡΠ΅Ρ: {self.score}", True, self.font_color) level_text = self.font.render(f"Π£ΡΠΎΠ²Π΅Π½Ρ: {self.level}", True, self.font_color) next_text = self.font.render("Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ:", True, self.font_color) pause_text = self.font.render("ΠΠ°ΡΠ·Π°: ΠΏΡΠΎΠ±Π΅Π»", True, self.font_color) esc_text = self.font.render("ΠΡΡ ΠΎΠ΄: Esc", True, self.font_color) screen.blit(score_text, (WIDTH - 140, 20)) screen.blit(level_text, (WIDTH - 140, 60)) screen.blit(next_text, (WIDTH - 140, 250)) screen.blit(pause_text, (WIDTH - 140, 400)) screen.blit(esc_text, (WIDTH - 140, 450)) self.draw_next_trimino(screen) else: screen.fill((0, 0, 0)) text = self.font.render("ΠΠ³ΡΠ° Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π°", True, (255, 0, 0)) text_rect = text.get_rect(center=(WIDTH // 2, HEIGHT // 2)) screen.blit(text, text_rect) self.restart_button.draw(screen) self.exit_button.draw(screen)
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΊΠ» ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΊΠ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ³ΡΡ, ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ·Π°ΠΌΠΈ:
- clock = pygame.time.Clock() β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ°ΡΡΠΎΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ³ΡΡ (FPS).
- running = True β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ-ΡΠ»Π°Π³ Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΈΠ³ΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° True, ΡΠΈΠΊΠ» ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ. ΠΠ½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³ΡΡ.
- paused = False β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π»ΠΈ ΠΈΠ³ΡΠ° Π½Π° ΠΏΠ°ΡΠ·Ρ.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ for event in pygame.event.get(). ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ (Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΎΠΊΠ½Π°).
game = Game() clock = pygame.time.Clock() running = True paused = False while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False elif event.key == pygame.K_SPACE and not game.game_over: paused = not paused elif not paused and not game.game_over: if event.key == pygame.K_LEFT: game.current_trimino.move_left(game.grid) elif event.key == pygame.K_RIGHT: game.current_trimino.move_right(game.grid) elif event.key == pygame.K_UP: game.current_trimino.rotate_colors() elif event.key == pygame.K_DOWN: game.current_trimino.drop_down(game.grid) elif event.type == pygame.MOUSEBUTTONDOWN and game.game_over: if game.restart_button.is_clicked(event.pos): game.reset_game() elif game.exit_button.is_clicked(event.pos): running = False screen.fill((0, 0, 0)) if not paused and not game.game_over: game.update() game.draw(screen) if paused: font = pygame.font.Font('MOSCOW2024.otf', 20) text = font.render("ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΏΡΠΎΠ±Π΅Π» Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ", True, (255, 255, 255)) text_rect = text.get_rect(center=(WIDTH // 2, HEIGHT // 2)) screen.blit(text, text_rect) pygame.display.flip() clock.tick(60) pygame.quit()
ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Amazing Frogs.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Pygame ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΡΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ³Ρ: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ³ΡΡ Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Π΅ΡΡΡ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Arcade ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Flet, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Flutter.
Python: ΠΎΡ Π½ΠΎΠ²ΠΈΡΠΊΠ° Π΄ΠΎ junior-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Π₯ΠΎΡΠ΅ΡΡ ΠΎΡΠ²ΠΎΠΈΡΡ Python ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ? ΠΠ°Ρ ΠΊΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΎΡΠ½ΠΎΠ² Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΡΠΎΠ² ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ², Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΡΡ ΠΎΡ ΡΠΊΡΠΏΠ΅ΡΡΠΎΠ².
- 90+ ΡΠ°ΡΠΎΠ² ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
- 4 ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠΎ
- Π Π°Π±ΠΎΡΠ° Ρ PyCharm ΠΈ Jupyter Notebook
- ΠΡΠ½ΠΎΠ²Ρ ΠΠΠ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±ΠΎΡΠΎΠ² Π΄Π»Ρ Telegram ΠΈ Instagram
- ΠΠ°ΡΡΠΈΠ½Π³ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ
ΠΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠ³Π»ΡΠ±ΠΈΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ. Π£ΡΠΈΡΠ΅ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΠΌΠΏΠ΅ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΎΠΏΡΡΠ½ΡΡ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»Π΅ΠΉ.