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
'코딩교육 > Python' 카테고리의 다른 글
목동코딩학원, 파이썬에서 사용되는 다양한 기호들에 대해 설명(% // -> ** @ 등) (0) | 2023.04.08 |
---|---|
목동코딩학원, Python으로 아두이노 제어하는 방법 (0) | 2023.03.25 |
목동코딩학원, Python 언어 기초 문법 (0) | 2023.03.25 |
목동코딩학원, Python 언어 가위바위보 게임 소스(3) (0) | 2023.03.25 |
목동코딩학원, Python 언어 가위바위보 게임 소스(2) (0) | 2023.03.25 |