-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
오잉또잉 체스게임 #6
base: hanueleee
Are you sure you want to change the base?
오잉또잉 체스게임 #6
Conversation
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
Co-authored-by: hanueleee <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
테스트 부분은 전부 given-when-then(준비-실행-검증)을 적용해보면 어떨까?
다른 사람이 보기에는 너무 어려운 것 같아
체스 미션한다고 고생했어!
README.md
Outdated
|
||
### 랭크 : 가로줄을 나타내는 enum | ||
|
||
### 파일 : 세로줄을 나타내느 enum |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
느 -> 는 오타입니다~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아차차~
String defaultPiece = ""; | ||
if (piece.getType() == PieceType.EMPTY) { | ||
return "."; | ||
} | ||
if (piece.getType() == PieceType.PAWN) { | ||
defaultPiece = "p"; | ||
} | ||
if (piece.getType() == PieceType.BISHOP) { | ||
defaultPiece = "b"; | ||
} | ||
if (piece.getType() == PieceType.KNIGHT) { | ||
defaultPiece = "n"; | ||
} | ||
if (piece.getType() == PieceType.ROOK) { | ||
defaultPiece = "r"; | ||
} | ||
if (piece.getType() == PieceType.QUEEN) { | ||
defaultPiece = "q"; | ||
} | ||
if (piece.getType() == PieceType.KING) { | ||
defaultPiece = "k"; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다음과 같이 맵을 사용하면 많은 분기를 줄일 수 있을 것 같아 👍
private static filnal Map<PieceType, String> Mapper = Map.of(
PieceType.PAWN, "p"
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아뭐야 똑같은말했네용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 그렇네 감사링
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
친절했다 ㄷㄷ
public static final int BLACK_GENERALS_RANK = 7; | ||
private final Map<Position, Piece> board; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정적 필드랑 필드는 구분해주면 좋을 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
디토
|
||
private void placePieceAtPosition(final List<Piece> pieces, final Position position, int rank) { | ||
if (position.isRank(rank)) { | ||
this.board.put(position, pieces.get(position.getFile().getIndex())); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인스턴스 필드, 메서드에 접근할 때 일관성있게 this를 사용하고 있는데
이렇게 사용하는 이유는 페어와 컨벤션을 맞췄기 때문이겠지?
이 부분에 대해서 어떻게 생각해? 사용하지 않는 쪽과 사용하는 쪽 뭐가 더 좋을 것 같아?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 별생각없는데 인텔리제이에서 저장 키맵?에 this가 자동으로 붙도록 설정해두고 진행했어.
this를 붙여서 정확도?명확성?은 올라갔는데, 전체적으로 다시보니까 코드가 괜히 길어지는 것 같기도 하네.
if (List.of(Direction.NE, Direction.SE, Direction.NW, Direction.SW).contains(direction)) { | ||
this.checkDiagonalPiece(destination); | ||
this.checkSameColor(destination, color); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
�direction.isDiagnoal
과 같이 해당 Direction이 대각선인지 확인하는 메서드를 만들어보면 어떨까?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인정 Direction을 객체답게!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굿굿
int sourceFIleIndex = this.getFile().getIndex(); | ||
int sourceRankIndex = this.getRank().getIndex(); | ||
int destinationFIleIndex = destination.getFile().getIndex(); | ||
int destinationRankIndex = destination.getRank().getIndex(); | ||
|
||
int fileGap = destinationFIleIndex - sourceFIleIndex; | ||
int sourceGap = destinationRankIndex - sourceRankIndex; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 File과 Rank에서 각각 같은 Enum을 받아 받을 수 있을 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음 enum으로 연산하라는 말?
try { | ||
return Direction.findByVector(fileGap, sourceGap); | ||
} catch (Exception ignored) { | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
orElseGet(빈 방향)을 반환한다면 try-catch를 사용하지 않아도 될 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
단위벡터를 사용해서 해결했습니다 ㅎㅎㅎ
if (fileGap > 0) { | ||
if (sourceGap > 0) { | ||
return Direction.NE; | ||
} | ||
if (sourceGap < 0) { | ||
return Direction.SE; | ||
} | ||
return Direction.E; | ||
} | ||
if (fileGap < 0) { | ||
if (sourceGap > 0) { | ||
return Direction.NW; | ||
} | ||
if (sourceGap < 0) { | ||
return Direction.SW; | ||
} | ||
return Direction.W; | ||
} | ||
|
||
if (sourceGap > 0) { | ||
return Direction.N; | ||
} | ||
return Direction.S; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Direction.findByVector가 아닌
static 필드로 나이트의 �방향 리스트(NNE, ENE, ESE, SSE, SSW, WSW, WNW, NNW); 과
그 외 방향을 필드로 두고
Direction.knightDirection(a, b)
Direction.of(a, b) 받아서 구할 수 있을 것 같아
그러면 반복 제거 할 수 있을 듯
|
||
public List<String> readCommand() { | ||
String input = scanner.nextLine(); | ||
return Arrays.stream(input.split(" ")).collect(Collectors.toList()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
" " 매직넘버
List<Piece> pieces = List.of(Rook.create(Color.WHITE), Knight.create(Color.WHITE), Pawn.create(Color.BLACK), | ||
Rook.create(Color.BLACK)); | ||
for (int i = 0; i < 4; i++) { | ||
assertThat(board).extracting("board").asInstanceOf(InstanceOfAssertFactories.MAP) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필드와 강결합(필드명을 알아야함)되는데 이렇게 사용할 이유가 있을까?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
무슨말이느뇨 이해하지 못했느뇨
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1차
src/main/java/chess/CommandLine.java
Outdated
private static final String INVALID_COMMAND_ERROR_MESSAGE = "잘못된 명령어입니다."; | ||
private static final String INVALID_ARGUMENT_ERROR_MESSAGE = "는 인자를 입력할 수 없습니다."; | ||
private static final String INVALID_ARGUMENT_COUNT_ERROR_MESSAGE = "는 인자를 2개만 가질 수 있습니다."; | ||
private static final String NO_ARGUMENT_ERROR_MESSAGE = "인자를 반환할 수 없는 명령입니다."; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 메세지를 상수가 할 필요가 있었어?
오히려 더 파악하기 힘든 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅈ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동의. 수정하겠삼 ㅎㅎㅎ
private final InputView inputView; | ||
private final OutputView outputView; | ||
|
||
public ChessController(final InputView inputView, final OutputView outputView) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굳이 주입해준 이유가 있을까?
static으로 사용해 보는건 어때?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
말랑 근데 static
으로 사용하는 거의 단점은 없나?
당장 InputView
가 여러가지로 가능한게 아니니 필요 없으려나??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 주입하기
- 주입안하고 그냥 생성자에서 알아서 초기화
static
으로 사용
이 셋 중 아무거나 쓰는 편
말랑이 3을 선호하는 이유는?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hanueleee
@eunkeeee
테스트할 것도 아니고 그냥 컨크롤러에서만 편하게 쓸건데 굳이 주입을 할 필요가 있어?
회면이 바뀔 것도 아니니까?
|
||
public class PieceMapper { | ||
|
||
public static String map(Piece piece) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Map<Type, String>을 쓰면 분기를 줄일 수 있을 것 같아
String defaultPiece = ""; | ||
if (piece.getType() == PieceType.EMPTY) { | ||
return "."; | ||
} | ||
if (piece.getType() == PieceType.PAWN) { | ||
defaultPiece = "p"; | ||
} | ||
if (piece.getType() == PieceType.BISHOP) { | ||
defaultPiece = "b"; | ||
} | ||
if (piece.getType() == PieceType.KNIGHT) { | ||
defaultPiece = "n"; | ||
} | ||
if (piece.getType() == PieceType.ROOK) { | ||
defaultPiece = "r"; | ||
} | ||
if (piece.getType() == PieceType.QUEEN) { | ||
defaultPiece = "q"; | ||
} | ||
if (piece.getType() == PieceType.KING) { | ||
defaultPiece = "k"; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아뭐야 똑같은말했네용
public static final int BLACK_GENERALS_RANK = 7; | ||
private final Map<Position, Piece> board; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
return this.board.get(position).isSameColor(color); | ||
} | ||
|
||
public List<Piece> getPiecesAt(Rank rank) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
findAllByRank도 좋을 듯?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅇ get
어쩌고를 쓰면 다른 사람 입장에서는 내부에 다른 로직이 존재할 것이라고 잘 생각 못하는 경우가 있어서 리얼 get
만 딱 하는 곳에서 쓰는게 좋을듯
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
get
은 진짜 get
만 하는 곳에서 써라 굿
} | ||
} | ||
|
||
private void checkDiagonalPiece(final Position destination) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
왜 diagonal 체크인데 isEmpty를 하는거야?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
폰은 대각선이 비어있으면 (다른 말을 잡을 수 없으면) 대각선으로 이동할 수 없으니까
|
||
public ChessGame() { | ||
this.status = GameStatus.START; | ||
this.board = Board.create(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
주입 받는것도 좋을 것 갘아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ChessGame
에 `Board를 주입하라는? 왜죠?
} | ||
|
||
public void start() { | ||
if (this.status != GameStatus.START) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상태 패턴을 학습해 보는것도 도움이 될 거 같은걸?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
시러
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
끼잉..
BLACK, | ||
NONE; | ||
|
||
public static Color reverse(Color color) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static 떼고, color.reverse()도 좋을 듯?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅈ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반영했습니다. 굿
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오잉아 나도 다녀간다
from. 깃짱코딩
@@ -1,7 +1,62 @@ | |||
# java-chess |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
와 commit 보고 벌써 4단계 DB연결 다한줄 ㄷㄷ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
킥 킥 어림도 없지
- [x] 룩 | ||
- [x] 비숍 | ||
- [x] 퀸 | ||
- [x] 킹 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좀 구체적으로 적어주세요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
왜여 >< 다 알자나
- [x] 빈 보드를 생성 | ||
- [x] 좌표를 입력으로 주었을때, 좌표의 피스를 반환(getPiece) | ||
- [x] 좌표에 피스가 존재하는지 확인 | ||
- [x] 같은 색깔 피스 인지 확인. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인.
src/main/java/chess/CommandLine.java
Outdated
private static final String INVALID_COMMAND_ERROR_MESSAGE = "잘못된 명령어입니다."; | ||
private static final String INVALID_ARGUMENT_ERROR_MESSAGE = "는 인자를 입력할 수 없습니다."; | ||
private static final String INVALID_ARGUMENT_COUNT_ERROR_MESSAGE = "는 인자를 2개만 가질 수 있습니다."; | ||
private static final String NO_ARGUMENT_ERROR_MESSAGE = "인자를 반환할 수 없는 명령입니다."; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅈ
src/main/java/chess/GameStatus.java
Outdated
public enum GameStatus { | ||
START, | ||
END, | ||
MOVE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
땀 안흘리고 끝나도 되나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
엥 그러게 얘말고도 다른 enum도 땀 안붙였는데 잘돌아가네 왤까,, 일단 수정했슴당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BLACK, | ||
NONE; | ||
|
||
public static Color reverse(Color color) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅇㅈ
public abstract class Piece { | ||
|
||
public static final String PIECE_CANNOT_MOVE_ERROR_MESSAGE = "이(가) 움직일 수 없는 위치입니다."; | ||
public static final String OUT_OF_DISTANCE_ERROR_MESSAGE = "이(가) 움직일 수 없는 거리입니다."; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
꼼꼼한 (가)얼?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어떤데 ㅋ
} | ||
|
||
private static List<Piece> createGenerals(final Color color) { | ||
List<Piece> generals = new ArrayList<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
List.of(Rook.create(color), ~~~~
해도 좋을듯 근데 똑같은듯
SSW(-1, -2), | ||
WSW(-2, -1), | ||
WNW(-2, 1), | ||
NNW(-1, 2); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
너무 축약이 심한듯?? 풀어서 써주면 더 좋을 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요거 나침판에 쓰이는 표기여서 그대로 가져와봤삼
public static final String INVALID_FILE_ERROR_MESSAGE = "잘못된 좌표입니다."; | ||
private final String label; | ||
|
||
private final int index; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
끔찍한 혼종ㅋㅋㅋㅋ
No description provided.