728x90

파이썬으로 테트리스 게임을 구현하는 코드는 다양하게 있을 수 있으며, 다음은 기본적인 테트리스 게임을 구현하는 예시 코드입니다.

import pygame
import random

# 게임 환경 설정
pygame.init()
screen_width = 300
screen_height = 600
block_size = 30
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()

# 색 설정
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

# 블록 모양과 색상
shapes = [
    [[1, 1, 1],
     [0, 1, 0]],
    [[0, 2, 2],
     [2, 2, 0]],
    [[3, 3, 0],
     [0, 3, 3]],
    [[4, 0, 0],
     [4, 4, 4]],
    [[0, 0, 5],
     [5, 5, 5]],
    [[6, 6],
     [6, 6]],
    [[7, 7, 7, 7]]
]
colors = [white, green, red, blue, (255, 165, 0), (255, 0, 255), (0, 255, 255)]

# 블록 클래스
class Block:
    def __init__(self, shape, x, y):
        self.shape = shape
        self.color = colors[shapes.index(shape)]
        self.x = x
        self.y = y

    def draw(self):
        for i in range(len(self.shape)):
            for j in range(len(self.shape[0])):
                if self.shape[i][j]:
                    pygame.draw.rect(screen, self.color, (self.x + j*block_size, self.y + i*block_size, block_size, block_size))

    def move_down(self):
        self.y += block_size

    def move_left(self):
        self.x -= block_size

    def move_right(self):
        self.x += block_size

    def rotate(self):
        self.shape = list(zip(*self.shape[::-1]))

# 블록 생성 함수
def create_block():
    shape = random.choice(shapes)
    x = int(screen_width / 2 - len(shape[0]) / 2 * block_size)
    y = 0
    return Block(shape, x, y)

# 충돌 검사 함수
def check_collision(block, blocks):
    for b in blocks:
        for i in range(len(block.shape)):
            for j in range(len(block.shape[0])):
                if block.shape[i][j] and b.x//block_size == block.x//block_size+j and b.y//block_size == block.y//block_size+i:
                    return True
    if block.x < 0 or block.x + len(block.shape[0])*block_size > screen_width:
        return True
    if block.y + len(block.shape)*block_size > screen_height:
        return True
    return False

# 게임 실행
blocks = []
score = 0
block = create_block()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
       screen.fill(black)

    # 블록 이동
    keys = pygame.key.get_pressed()
    if keys[pygame.K_DOWN]:
        block.move_down()
    if keys[pygame.K_LEFT]:
        block.move_left()
    if keys[pygame.K_RIGHT]:
        block.move_right()
    if keys[pygame.K_UP]:
        block.rotate()

    # 블록 떨어뜨리기
    if pygame.time.get_ticks() % 500 == 0:
        block.move_down()
        if check_collision(block, blocks):
            block.y -= block_size
            blocks.append(block)
            block = create_block()

    # 블록 그리기
    block.draw()
    for b in blocks:
        b.draw()

    # 라인 제거
    for i in range(20):
        if len([b for b in blocks if b.y == i*block_size]) == 10:
            score += 1
            for b in blocks:
                if b.y == i*block_size:
                    blocks.remove(b)
            for b in blocks:
                if b.y < i*block_size:
                    b.move_down()

    # 화면 업데이트
    pygame.display.set_caption(f"Tetris (Score: {score})")
    pygame.display.update()
    clock.tick(60)

이 코드는 Pygame 라이브러리를 이용하여 테트리스 게임을 구현한 코드입니다. 코드 내부에 주석을 달아 각각의 기능을 설명하도록 노력했으니, 필요한 경우 코드를 참고하시면 됩니다. 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90

+ Recent posts