Giter Site home page Giter Site logo

java-chess's Introduction

java-chess

체스 미션 저장소

체스 미션 목표

  • 공통 목표

    • 객체간의 결합도가 낮은 코드 짜기
    • TDD 스럽게 구현하기
    • 에러를 받아도 사용자가 기분이 상하지 않게 구현하기
  • 야호 목표

    • 객체의 클래스를 Final 이나 Abstract 으로!
    • 접근제어자를 적절하게 사용하기
  • 아스피 목표

    • 리뷰어한테 칭찬 받아보기
    • 행동에 초점을 맞춰서 객체 구현

구현 기능 목록

1단계 기능 목록

  • 체스판 초기화

    • 가로 위치 : 왼쪽부터 a~h
    • 세로 위치 : 아래부터 1~8
    • 흰색 : ♚♛♝♞♟♜
    • 검은색 : ♔♕♗♘♙♖
  • 게임 시작/종료 입력

    • 시작 : start 로만 입력
      • 초기화 된 체스판 보여주기
    • 종료 : end 로만 입력
    • 지정된 명령어 외의 입력에 대한 예외처리

2단계 기능 목록

  • 1단계에서 변경된 부분

    • 시작/종료 외에도 이동을 입력받는다.
      • 움직이고자 하는 말의 위치 (source)
        • 현재 순서의 팀의 말이 해당 위치에 있어야 한다.
      • 목표하는 위치 (target)
        • 같은 팀의 말이 있으면 안된다.
        • 현재 위치의 말이 움직일 수 있는 위치여야 한다.
      • 체스판 범위 내의 위치여야 한다.
      • 문자열 길이가 2여야 한다.
      • input 에서 대문자가 입력되면 lower case 로 변경해준다.
  • 말들을 이동하는 기능

    • king : 전후좌우 대각선 1칸씩
    • queen : 전후좌우 대각선으로 칸 수 제한 없이
    • knight : 전후좌우 두칸 전진한 상태에서 양옆으로 한칸씩 이동 가능
    • bishop : 대각선으로 칸 수 제한 없이
    • rook : 전후좌우로 칸 수 제한 없이
    • pawn : 초기 상태에서는 한칸 혹은 두칸 전진 가능, 그 이후로는 한칸씩만 전진 가능, 잡는건 대각선으로만

3단계 기능 목록

  • 2단계에서 변경된 부분
    • 흰 말, 검은 말 순으로 번갈아가면서 진행된다.
    • 에러 메세지를 사용자 친화적으로 작성한다. ^^
  • 종료 조건
    • end : 즉시 프로그램 종료
    • king이 잡히면 status 나 end 만 입력 가능
      • game 은 종료
  • status
    • 남아있는 말에 대한 점수를 계산
    • king = 0점
    • queen = 9점
    • rook = 5점
    • bishop = 3점
    • knight = 2.5점
    • pawn = 기본 1점 / 같은 세로줄에 같은 색의 폰이 있는 경우 0.5점

각 도메인의 역할

File & Rank

  • 입력받은 문자열에 해당하는 값 반환
  • 체스판 내의 칸(square)에 대한 연산 지원

Square

  • 필드 : file, rank
  • 체스판 내의 칸에 대한 연산

Direction

  • 수학에서 사용되는 벡터 연산
    • 체스판 내의 칸끼리의 거리와 방향을 가짐
    • 단위 벡터를 구하고 활용하는 기능을 가짐

PieceCondition

  • file과 rank를 받아서 해당 위치가 시작 위치인 Piece를 판단

PieceGenerator

  • PieceCondition 으로 판단한 피스에 색을 결정하여 반환

Piece

  • 필드 : Color, Score
  • 목표 위치에 갈 수 있는지 판단 (position)
    • 각 피스마다 갈 수 있는 단위 벡터들을 상수로 가짐
  • 팀의 점수를 매길떄 자신의 점수를 더해줌

Board

  • Square와 Piece를 짝으로 가지고 있는 일급 컬렉션
  • 각 Square에 있는 Piece의 이동 관리
    • 목표 위치에 갈 수 있는지 판단 (direction)

ChessGame

  • 필드 : Board, 턴을 결정하는 Color
  • 사용자 순서 관리
  • King이 잡혔는지 확인

Status

  • 순간의 체스판을 저장
  • 저장된 체스판을 가지고 요구받은 팀에 대한 score 계산

우아한테크코스 코드리뷰

java-chess's People

Contributors

pobiconan avatar yaho99 avatar woowahan-pjs avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.