테트리스 강좌

초등학생도 쉽게 따라할 수 있는 Unity 테트리스 게임 개발 강좌 자료

테트리스 게임 시스템 설계 개요

📖 이 문서는?

테트리스 게임의 전체적인 시스템 설계를 한눈에 볼 수 있는 문서입니다.
프로젝트를 시작하기 전에 전체 구조를 이해하는 데 도움이 됩니다.

📐 예시 구조 가이드 활용
단계별 학습 2~8단계 각 문서에는 “이번 단계 후 예시 구조” 박스가 있어, 여기 나오는 Hierarchy·클래스 구조와 연결됩니다. 실습할 때 예시 구조를 보면서 “지금 만드는 게 어디에 해당하는지” 확인하면 됩니다.


🎯 시스템 아키텍처

전체 시스템 구조

┌─────────────────────────────────────────────────────────┐
│                    Unity 씬 (Scene)                      │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ┌──────────────┐      ┌──────────────┐               │
│  │ GameController│      │  InputHandler │              │
│  │ (게임 제어)   │      │  (입력 처리)  │              │
│  └──────┬───────┘      └──────┬───────┘               │
│         │                     │                        │
│         │ 참조                │ 제어                   │
│         ↓                     ↓                        │
│  ┌──────────────┐      ┌──────────────┐               │
│  │  GameBoard   │      │   TetrisBlock  │               │
│  │ (보드 관리)   │◄─────┤  (블록 제어) │               │
│  └──────┬───────┘      └──────┬───────┘               │
│         │                     │                        │
│         │ 사용                │ 생성                   │
│         ↓                     ↓                        │
│  ┌──────────────┐      ┌──────────────┐               │
│  │   Spawner    │      │     UI       │               │
│  │ (블록 생성)  │      │  (화면 표시) │               │
│  └──────────────┘      └──────────────┘               │
│                                                          │
└─────────────────────────────────────────────────────────┘

🏗️ 클래스 역할 분담

1. GameController (게임 제어자)

역할: 게임의 전체적인 흐름 제어

책임:

주요 함수:


2. GameBoard (게임 보드)

역할: 게임 보드 관리

책임:

주요 함수:


3. TetrisBlock (테트리스 블록)

역할: 블록 제어

책임:

주요 함수:


4. Spawner (생성기)

역할: 블록 생성

책임:

주요 함수:


5. InputHandler (입력 처리기)

역할: 사용자 입력 처리

책임:

주요 함수:


🔄 데이터 흐름

점수 시스템 데이터 흐름

블록 고정
  ↓
행 제거 (GameBoard.CheckForLines())
  ↓
제거한 행 개수 반환
  ↓
GameController.AddScore(clearedRows)
  ↓
점수 계산
  ├─ score += points[linesCleared] * level
  ├─ lines += linesCleared
  └─ level = (lines / 10) + 1
  ↓
UI 업데이트
  ├─ scoreText.text = "Score: " + score
  ├─ linesText.text = "Lines: " + lines
  └─ levelText.text = "Level: " + level

블록 이동 데이터 흐름

키 입력
  ↓
InputHandler.Update()
  ↓
TetrisBlock.MoveLeft() 호출
  ↓
ValidMove() 확인
  ├─ GameBoard.IsValidPosition()
  └─ GameBoard.IsCellEmpty()
  ↓
이동 가능 여부 반환
  ↓
이동 또는 정지
  ├─ position 업데이트
  └─ UpdateVisualPosition()

📊 상태 관리

게임 상태

게임 상태 변수:
- score (점수)
- lines (제거한 줄 수)
- level (레벨)
- isGameOver (게임 오버 여부)

블록 상태

블록 상태 변수:
- position (위치)
- cells (셀 위치들)
- shapeIndex (모양 번호)
- fallTime (낙하 시간)

보드 상태

보드 상태:
- grid[width, height] (그리드 배열)
- 각 셀: null 또는 Transform (블록)

🎮 이벤트 시퀀스

블록 고정 이벤트 시퀀스

1. TetrisBlock.MoveDown()
   - 더 이상 내려갈 수 없음
   ↓
2. LockPiece() 호출
   ↓
3. 블록을 GameBoard에 저장
   - gameBoard.AddToGrid() 호출
   ↓
4. 행 제거 확인
   - gameBoard.CheckForLines() 호출
   - 제거한 행 개수 반환
   ↓
5. 점수 추가
   - gameController.AddScore() 호출
   ↓
6. 다음 블록 생성
   - spawner.NewTetris() 호출
   ↓
7. 현재 블록 삭제
   - Destroy(gameObject)

🔗 클래스 의존성

의존성 그래프

GameController
  ├─ GameBoard (참조)
  └─ UI Text (연결)

GameBoard
  └─ (독립적)

TetrisBlock
  ├─ GameBoard (참조)
  ├─ GameController (참조)
  └─ Spawner (참조)

Spawner
  ├─ GameBoard (참조)
  └─ GameController (참조)

InputHandler
  └─ TetrisBlock (참조)

설명:


📐 UI 구조

UI 계층 구조

Canvas
├─ EventSystem (자동 생성)
├─ ScoreText
├─ LinesText
└─ LevelText

위치:

연결:


⚙️ 초기화 순서

게임 시작 시 실행 순서

1. Unity 씬 로드
   ↓
2. Awake() 함수들 실행 (동시에)
   - GameBoard.Awake(): 그리드 초기화
   - GameController.Awake(): 변수 초기화
   ↓
3. Start() 함수들 실행 (동시에)
   - GameController.Start(): UI 초기화
   - Spawner.Start(): 첫 블록 생성
   - TetrisBlock.Start(): 블록 초기화
   - InputHandler.Start(): (없음)
   ↓
4. Update() 함수들 실행 (매 프레임)
   - InputHandler.Update(): 입력 확인
   - TetrisBlock.Update(): 자동 낙하

🎯 핵심 설계 원칙

1. 단일 책임 원칙

각 클래스는 하나의 명확한 역할만 담당:

2. 느슨한 결합

클래스들이 서로 독립적으로 작동:

3. 명확한 인터페이스

각 클래스의 public 함수가 명확:


📚 관련 문서


🎓 학습 가이드

초보자를 위한 학습 순서

권장 학습 경로:

1단계: 전체 구조 이해
   └─ 시스템설계개요.md 읽기
       - 클래스 역할 이해
       - 시스템 구조 파악
   ↓
2단계: 처리 흐름 이해
   └─ 프로그램처리흐름설계.md 읽기
       - 게임 루프 이해
       - 데이터 흐름 이해
   ↓
3단계: UI 구조 이해
   └─ UI배치구조설계.md 읽기
       - UI 배치 방법 이해
       - 레이아웃 설계 이해
   ↓
4단계: 개념 학습
   └─ 개념설명.md 읽기
       - 프로그래밍 개념 이해
       - Unity 개념 이해
   ↓
5단계: 실습
   └─ 단계별학습가이드.md 따라하기
       - 실제로 코드 작성
       - 게임 만들기
   ↓
6단계: 코드 이해
   └─ 각 클래스 코드 읽기
       - 주석 읽기
       - 구현 방법 이해

강의 진행 시:


이 문서를 먼저 읽고 프로젝트를 시작하세요! 🎮