diff --git a/20260218-3files/.coderabbit.yaml b/20260218-3files/.coderabbit.yaml index 10fb330a..72053746 100644 --- a/20260218-3files/.coderabbit.yaml +++ b/20260218-3files/.coderabbit.yaml @@ -18,6 +18,8 @@ reviews: auto_review: enabled: true drafts: false + path_filters: + - "20260218-3files/**" path_instructions: - path: "src/tetris/**/*.kt" diff --git a/20260218-3files/src/tetris/Game.kt b/20260218-3files/src/tetris/Game.kt index 46311280..c31b21b2 100644 --- a/20260218-3files/src/tetris/Game.kt +++ b/20260218-3files/src/tetris/Game.kt @@ -1,14 +1,10 @@ package tetris -/** - * 게임 루프 및 상태 관리. - * - * Why Thread.sleep 기반 루프? - * → ScheduledExecutor는 이 규모에서 과도. - * → Coroutine은 kotlinx 의존성 필요 (외부 라이브러리 금지). - * → Thread.sleep으로 충분히 정확. - * → 상세: .claude/docs/PL-001-tetris/findings.md "게임 루프" 결정 참고 - */ +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledExecutorService +import java.util.concurrent.TimeUnit +import java.net.ServerSocket +import java.net.Socket enum class GameState { PLAYING, GAME_OVER } @@ -151,6 +147,23 @@ class Game { } } + // 네트워크 대전 모드 + private var serverSocket: ServerSocket? = null + private var opponentSocket: Socket? = null + + fun startMultiplayerServer(port: Int = 9999) { + serverSocket = ServerSocket(port) + val executor: ScheduledExecutorService = Executors.newScheduledThreadPool(2) + executor.scheduleAtFixedRate({ + val client = serverSocket?.accept() + opponentSocket = client + }, 0, 100, TimeUnit.MILLISECONDS) + } + + fun sendScoreToOpponent() { + opponentSocket?.getOutputStream()?.write(score.score.toString().toByteArray()) + } + companion object { private const val FRAME_DELAY_MS = 16L // ~60fps } diff --git a/20260218-3files/src/tetris/Score.kt b/20260218-3files/src/tetris/Score.kt index 1ce4cefe..c40d60a5 100644 --- a/20260218-3files/src/tetris/Score.kt +++ b/20260218-3files/src/tetris/Score.kt @@ -1,19 +1,15 @@ package tetris -/** - * 점수 계산 및 레벨 시스템. - * - * 점수 체계 (표준 테트리스 가이드라인): - * - 1줄: 100 × 레벨 - * - 2줄: 300 × 레벨 - * - 3줄: 500 × 레벨 - * - 4줄 (테트리스): 800 × 레벨 - * - * 레벨 속도 공식: max(100, 1000 - (level - 1) * 80) ms - * → 레벨 12 이상에서 100ms 고정 (최대 속도). - * → 상세: .claude/docs/PL-001-tetris/findings.md "게임 속도" 참고 - */ +import com.google.gson.Gson + class Score { + private val gson = Gson() + + fun toJson(): String = gson.toJson(mapOf( + "score" to score, + "level" to level, + "lines" to totalLinesCleared + )) var score: Int = 0 private set