Skip to content

Latest commit

Β 

History

History
134 lines (114 loc) Β· 4.95 KB

File metadata and controls

134 lines (114 loc) Β· 4.95 KB

Rummikub Network Game

λ„€νŠΈμ›Œν¬ν”„λ‘œκ·Έλž˜λ° νŒ€ ν”„λ‘œμ νŠΈ – TCP 기반 λ©€ν‹°ν”Œλ ˆμ΄ 루미큐브 κ²Œμž„ Java Socket + Swing UI둜 κ΅¬ν˜„ν•œ 4인 λ©€ν‹°ν”Œλ ˆμ΄ λ£¨λ―ΈνλΈŒμž…λ‹ˆλ‹€.
μ„œλ²„κ°€ λͺ¨λ“  κ²Œμž„ κ·œμΉ™κ³Ό 점수λ₯Ό κ΄€λ¦¬ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈλŠ” UI/μž…λ ₯/ν‘œμ‹œλ§Œ λ‹΄λ‹Ήν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.


✨ μ£Όμš” κΈ°λŠ₯

πŸ”΅ 곡톡(common)

  • ν…μŠ€νŠΈ 기반 ν”„λ‘œν† μ½œ μ •μ˜ (TYPE|payload ν˜•μ‹)
  • 타일 λͺ¨λΈ (색상, 숫자, 쑰컀 μ—¬λΆ€)
  • λ©”μ‹œμ§€ / 처리 κ²°κ³Ό 곡톡 ꡬ쑰

πŸ–₯ μ„œλ²„ (rummikub-server)

  • μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈ λ™μ‹œ 접속 관리 (μŠ€λ ˆλ“œ 기반 ClientSession)
  • λ°©(Room) 생성 / μž…μž₯ / 퇴μž₯ / λ°©μž₯ 관리
  • 루미큐브 λ£° μ—”μ§„ (GameCore)
    • SET / RUN λ©œλ“œ 검증
    • Joker(쑰컀) κ°’ μΆ”λ‘  및 κ³ μ • (RJoker(5) ν˜•νƒœ)
    • 초기 30점 κ·œμΉ™ 검증
    • λ©œλ“œ μž¬μ‘°ν•© ν›„ 남은 μ‘°κ°κΉŒμ§€ μœ νš¨ν•œμ§€ 검사
  • λ©œλ“œ 재배치 μ•Œκ³ λ¦¬μ¦˜ (MeldRearranger)
  • 점수 μ‹œμŠ€ν…œ
    • λΌμš΄λ“œ μ’…λ£Œ μ‹œ μ†νŒ¨ 점수 ν•©μ‚°
    • μŠΉμžλŠ” λ‹€λ₯Έ ν”Œλ ˆμ΄μ–΄ 점수 ν•©λ§ŒνΌ +
    • νŒ¨μžλŠ” μžμ‹ μ˜ μ†νŒ¨ 점수만큼 –
    • SCORE|name|score λΈŒλ‘œλ“œμΊμŠ€νŠΈ

πŸ’» ν΄λΌμ΄μ–ΈνŠΈ (rummikub-client)

  • 둜그인 ν™”λ©΄ (μ„œλ²„ μ£Όμ†Œ/포트/λ‹‰λ„€μž„ μž…λ ₯)
  • λ‘œλΉ„ ν™”λ©΄
    • λ°© λͺ©λ‘ 쑰회 (LIST)
    • λ°© 생성 (CREATE)
    • λ°© μž…μž₯ (JOIN)
  • κ²Œμž„λ£Έ ν™”λ©΄
    • ν…Œμ΄λΈ” λ³΄λ“œ (BoardPanel) – μ„œλ²„ λ³΄λ“œλ₯Ό κ·ΈλŒ€λ‘œ κ·Έλ¦Ό
    • μ†νŒ¨ νŒ¨λ„ (TwoRowHandPanel) – 2쀄 μ†νŒ¨ + μ •λ ¬(색상/숫자)
    • λ“œλž˜κ·Έ&λ“œλ‘­μœΌλ‘œ λ©œλ“œ ꡬ성 / μž¬μ‘°ν•©
    • κ·œμΉ™ μœ„λ°˜ μ‹œ ν„΄ 내에 λ‚Έ νƒ€μΌλ§Œ λ‘€λ°±
    • ν˜„μž¬ ν„΄ / λ‚΄ 점수 라벨 ν‘œμ‹œ
    • 승리/패배 + 점수 ν‘œμ‹œ νŒμ—…

🧱 ꡬ쑰 / 디렉터리

NetWorkProgramming/
└─ rummikub/
   β”œβ”€ rummikub-server/
   β”‚  └─ src/
   β”‚     β”œβ”€ common/
   β”‚     β”‚  β”œβ”€ Message.java       // 곡톡 λ©”μ‹œμ§€ ꡬ쑰
   β”‚     β”‚  β”œβ”€ Protocol.java      // ν”„λ‘œν† μ½œ μƒμˆ˜ μ •μ˜
   β”‚     β”‚  β”œβ”€ Result.java        // 처리 κ²°κ³Ό ν‘œν˜„
   β”‚     β”‚  └─ Tile.java          // 타일 데이터 λͺ¨λΈ
   β”‚     β”‚
   β”‚     └─ server/
   β”‚        β”œβ”€ ServerMain.java    // μ„œλ²„ μ‹€ν–‰ μ§„μž…μ  (main)
   β”‚        β”œβ”€ GameServer.java    // ServerSocket, ClientSession 관리
   β”‚        β”œβ”€ ClientSession.java // ν΄λΌμ΄μ–ΈνŠΈλ³„ μ„Έμ…˜ μŠ€λ ˆλ“œ
   β”‚        β”œβ”€ Room.java          // λ°©(λ£Έ) 관리, ν„΄/PLAY/NO_TILE 처리
   β”‚        β”œβ”€ GameCore.java      // κ²Œμž„ κ·œμΉ™, λ©œλ“œ/쑰컀 검증, 점수 계산
   β”‚        └─ MeldRearranger.java// μ„œλ²„ μΈ‘ λ©œλ“œ μž¬μ‘°ν•© μ•Œκ³ λ¦¬μ¦˜
   β”‚
   β”œβ”€ rummikub-client/
   β”‚  └─ src/
   β”‚     β”œβ”€ client/
   β”‚     β”‚  β”œβ”€ ClientMain.java      // ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰ μ§„μž…μ 
   β”‚     β”‚  β”œβ”€ ClientApp.java       // 전체 μ•± 둜직, ν™”λ©΄ μ „ν™˜, λ©”μ‹œμ§€ ν•Έλ“€λŸ¬
   β”‚     β”‚  β”œβ”€ NetIO.java           // μ†ŒμΌ“ μ—°κ²°, send()/μˆ˜μ‹  μŠ€λ ˆλ“œ
   β”‚     β”‚  β”œβ”€ LoginView.java       // 둜그인 ν™”λ©΄
   β”‚     β”‚  β”œβ”€ LobbyView.java       // λ‘œλΉ„(λ°© λͺ©λ‘/생성/μž…μž₯)
   β”‚     β”‚  β”œβ”€ RoomView.java        // κ²Œμž„ ν™”λ©΄(λ³΄λ“œ, μ†νŒ¨, μ±„νŒ…, 점수, νŒμ—…)
   β”‚     β”‚  β”œβ”€ BoardPanel.java      // ν…Œμ΄λΈ” λ³΄λ“œ UI, λ©œλ“œ/타일 λ°°μΉ˜Β·μž¬μ‘°ν•©
   β”‚     β”‚  β”œβ”€ TwoRowHandPanel.java // μ†νŒ¨ 2쀄 ν‘œμ‹œ 및 μ •λ ¬
   β”‚     β”‚  └─ TileView.java        // κ°œλ³„ 타일 UI, λ“œλž˜κ·Έ/쑰컀 ν‘œμ‹œ
   β”‚     β”‚
   β”‚     └─ assets/
   β”‚        └─ images/
   β”‚           β”œβ”€ login_bg.png
   β”‚           β”œβ”€ R1.png, R2.png, ...
   β”‚           β”œβ”€ BL1.png, ...
   β”‚           β”œβ”€ RJoker.png
   β”‚           └─ BJoker.png
   β”‚
   └─ (docs, README λ“±)

βš™οΈ 기술 μŠ€νƒ

  • μ–Έμ–΄: Java
  • UI: Swing + FlatLaf (λͺ¨λ˜ 룩앀필)
  • λ„€νŠΈμ›Œν¬: TCP Socket, ν…μŠ€νŠΈ 기반 ν”„λ‘œν† μ½œ
  • ꡬ쑰
    • 곡톡 λͺ¨λ“ˆ(common) + μ„œλ²„(server) + ν΄λΌμ΄μ–ΈνŠΈ(client) 3계측
    • μ„œλ²„ authoritative (λͺ¨λ“  λ£°/μ μˆ˜λŠ” μ„œλ²„μ—μ„œλ§Œ κ²°μ •)

πŸš€ μ‹€ν–‰ 방법

  1. Eclipse μ‹€ν–‰
  2. File > Import > General > Existing Projects into Workspace
  3. μ••μΆ• ν•΄μ œν•œ ν”„λ‘œμ νŠΈ 폴더 선택 ν›„ Finish

β€» μ„œλ²„λ₯Ό λ¨Όμ € μ‹€ν–‰ν•œ ν›„ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. β€» Java 21 이상 ν™˜κ²½μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.

1) μ„œλ²„ μ‹€ν–‰

  • κΈ°λ³Έ 포트(예: 5000)둜 μ„œλ²„κ°€ μ—΄λ¦Ό λ˜λŠ” ν„°λ―Έλ„μ—μ„œ (μ˜ˆμ‹œ)
  • rummikub-server > src/server/ServerMain.java
  • 우클릭 > Run As > Java Application
cd rummikub-server/src
javac common/*.java server/*.java
java server.ServerMain

2) ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰

  • rummikub-client > src/client/ClientMain.java

  • 우클릭 > Run As > Java Application

  • 둜그인 ν™”λ©΄μ—μ„œ

    • 호슀트: localhost
    • 포트: 5000
    • 이름: μ›ν•˜λŠ” λ‹‰λ„€μž„ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ—¬λŸ¬ 개 μ‹€ν–‰ν•˜λ©΄ ν•œ PCμ—μ„œ 닀쀑 접속 ν…ŒμŠ€νŠΈ κ°€λŠ₯.