Skip to content

yourssu-Lab/java-gomoku

Repository files navigation

LV2 인큐베이팅 - 오목 ⚪️

🚀 기능 요구사항

오목은 바둑판에 두 사람이 번갈아 돌을 놓아 가로나 세로, 대각선으로 다섯 개의 연속된 돌을 놓으면 이기는 게임이다.

  • 돌을 놓을 수 있는 바둑판의 가로, 세로 길이는 N이다. (5 ≤ N ≤ 15)
  • 두 명의 플레이어가 참여하며, 한 명은 검은 돌 다른 한 명은 흰 돌을 사용한다.
  • 일반룰을 사용한다.
    • 플레이어들은 번갈아가며 바둑판의 빈 교차점에 자신의 돌을 하나씩 놓는다.
    • 가로, 세로, 대각선 방향으로 자신의 돌 다섯 개를 연속으로 먼저 놓는 플레이어가 승리한다.
    • 한번 놓은 돌은 이동하거나 제거할 수 없다.
    • 모든 칸을 채우면 무승부가 된다.
  • 어느 한 플레이어가 승리하거나 무승부가 되면 애플리케이션을 종료한다.
  • 플레이어가 잘못된 값을 입력할 경우IllegalArgumentException을 발생시킨 후 애플리케이션을 종료한다.
  • 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다.

✍🏻 입출력 요구사항

⌨️ 입력

  • 좌표 입력
    • 가로줄: A, B, C, D
    • 세로줄: 1, 2, 3, 4
    • A1
    • O15

🖥 출력

  • 바둑판 레이아웃
    • 검은 돌: X
    • 흰 돌: O
    • 빈 공간: #
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # # # # # # # # # # # # #
 3  # # # # # # # # # # # # # # #
 2  # # # # # # # # # # # # # # #
 1  # # # # # # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

💻 프로그래밍 실행 결과 예시

Turn 1
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # # # # # # # # # # # # #
 3  # # # # # # # # # # # # # # #
 2  # # # # # # # # # # # # # # #
 1  # # # # # # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: A1

Turn 1
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # # # # # # # # # # # # #
 3  # # # # # # # # # # # # # # #
 2  # # # # # # # # # # # # # # #
 1  X # # # # # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

백(O)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: B2

Turn 2
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # # # # # # # # # # # # #
 3  # # # # # # # # # # # # # # #
 2  # O # # # # # # # # # # # # #
 1  X # # # # # # # # # # # # # #
 O  A B C D E F G H I J K L M N O
 
 흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: 
Turn 5
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # X # # # # # # # # # # #
 3  # # X # # # # # # # # # # # #
 2  # X # # # # # # # # # # # # #
 1  X O O O O # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

 흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: E5

Result
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # X # # # # # # # # # #
 4  # # # X # # # # # # # # # # #
 3  # # X # # # # # # # # # # # #
 2  # X # # # # # # # # # # # # #
 1  X O O O O # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

BLACK wins!
Turn 2
 O  A B C D E F G H I J K L M N O
15  # # # # # # # # # # # # # # #
14  # # # # # # # # # # # # # # #
13  # # # # # # # # # # # # # # #
12  # # # # # # # # # # # # # # #
11  # # # # # # # # # # # # # # #
10  # # # # # # # # # # # # # # #
 9  # # # # # # # # # # # # # # #
 8  # # # # # # # # # # # # # # #
 7  # # # # # # # # # # # # # # #
 6  # # # # # # # # # # # # # # #
 5  # # # # # # # # # # # # # # #
 4  # # # # # # # # # # # # # # #
 3  # # # # # # # # # # # # # # #
 2  # O # # # # # # # # # # # # #
 1  X # # # # # # # # # # # # # #
 O  A B C D E F G H I J K L M N O

흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: q

게임이 종료되었습니다.

🎱 프로그래밍 요구사항

  • 애플리케이션을 실행하는 시작점은Applicationmain()이다.
  • JDK 21 버전에서 실행 가능해야 한다.
  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.
  • 테스트가 필요한 부분을 판단하여 단위 테스트를 작성한다.
  • 한 메서드에 오직 한 단계의 들여쓰기만 한다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 메서드를 분리하면 된다.
  • 메서드의 길이는 10줄 이내로 한다. 메서드가 한 가지 일만 하도록 최대한 작게 만들어야 한다.
  • 3항 연산자를 쓰지 않는다.
  • else 키워드를 쓰지 않는다. (당연히 switch/case 도 금지)
  • 4개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  • 한 줄에 점을 하나만 찍는다.
  • 줄여 쓰지 않는다(축약 금지).
  • 일급 컬렉션을 사용한다.
  • Getter/Setter 사용을 지양한다.
  • 주석을 사용하지 말고 소스코드에 의도를 드러낸다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages