git : https://github.com/tjdgudtlr1-byte/tetris-game
Python을 이용하여 테트리스를 만들어 보았습니다.
2차원 배열에 대한 이해 특히 행(ROW)과 열(COL)을 이용해서 격자무늬를 그리고
해당 칸안에 데이터값을 0과 1로 나누어
"1이면 해당 칸을 색칠해", "0이면 해당 칸을 비워놔"
"1이면 해당 칸 위에 블록을 고정시켜", "0이면 해당 칸을 지나가"
"1이면 해당 칸에서 회전 불가", "0이면 해당 칸에서 회전가능" 등,
행과 열을 가지고 여러가지 기능을 구현해 볼 수 있는 재밌는 시간이었습니다.
지금 형태는 절차 지향 프로그래밍이라고 볼 수 있는데,
계속해서 객체 지향 프로그래밍으로 바꿀 수 있게, 클래스화 하고, 클래스 안에서 메소드를 만들고, 변수를 선언해서. 전역 변수를 사용하지 않게 바꿀 계획입니다.
근데 생각보다 그게 또 쉽지않네요
지금 상태는 함수, 함수, 함수, 함수 구조이고. 이 함수들을 main함수에 호출시켜서 실행시키는 형태라 지금 함수 호출이 조금만 잘못되어도 게임자체가 안 돌아갈 수가 있어요. 그래서 이런 구조를 바꿔 보려 노력 중입니다.
매우 기초적인 지식이긴 한데, 저는 {를사용하면, 딕셔너리(dict), [를 사용하면 리스트(list), (를 사용하면 튜플(tuple)로 이해하고 있었는데 이것을 섞어서 사용하면 셋(set)이라던가, 다른 형태로도 나올 수 있다고 합니다.
특히 제가 사용했던 게 { dict + [ list 구조였는데 여기서
SHAPES = {
'I': [
[
[1, 1, 1, 1] #rotation 0
],
[
[1],
[1],
[1],
[1],
], #rotation 1
],
]를 잘못 닫아서 dict형태가 아닌 set형태가 되어서 오류가 발생한 적이 있었습니다. 이러한 부분들을 좀 더 자세히 이해할 필요가 있음을 다시 한번 파악했습니다.
그것을 확인하려면 해당 명령어를 이용해서 출력값을 터미널에서 확인해 봅니다.
print(type(SHAPES)) # SHAPES의 타입을 출력하여 딕셔너리인지 확인
그리고 계속돼서 사용되는 for문이 정말 어려웠었는데.
제가 테트리스를 만들면서 공부한 내용은 2가지가 있었는데
변수 무시형 1 for b in range(3)과 b * 2 for b in range(3) 이 두 개가 있는데
1 for b in range(3) # 뭐든 상관없이 그냥 1을 내놔라 따라서 결과는 (1,1,1)
b * 2 for b in range(3) # 꺼낸 값 b에 2를 곱해서 내놔라 (0,2,4) 형태가됨
라고 이해하면 편합니다.
박스(c) 안에 좌표들이 들어있네? 첫 번째 좌표(b)를 꺼내서 거기에 점을 찍고, 그다음 좌표(b)를 꺼내서 또 점을 찍어야지.
그래서 b는 단순한 반복 횟수가 아니라, 매 순간 변화는 실제 좌표 데이터가 된다라고 이해했습니다.
여러 가지 많은 우여곡절이 있었지만 블록이 파괴되면 점수가 얻어지는 그런 초럭키한 재밌는 테트리스가 완성되었습니다. 감사합니다.
'Python > 게임' 카테고리의 다른 글
| [Python] 지뢰찾기 게임 모듈화 (0) | 2026.03.13 |
|---|---|
| [Python] 지뢰찾기 만들기 회고 (0) | 2026.03.12 |