[๐ ์ฌ์ดํด1 - ๋ฏธ์ (๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ์๋ฒ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#265
[๐ ์ฌ์ดํด1 - ๋ฏธ์
(๋ณด๋ ์ด๊ธฐํ + ๊ธฐ๋ฌผ ์ด๋)] ์๋ฒ ๋ฏธ์
์ ์ถํฉ๋๋ค.#265Chocoding1 wants to merge 99 commits intowoowacourse:chocoding1from
Conversation
Arachneee
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ์๋ฒ!
๋ฆฌ๋ทฐ์ด ๋ฐฑํธ์ ๋๋ค. ๐
๋ฏธ์ ํ๋๋ผ ๊ณ ์ํ์ จ์ต๋๋ค. ๊ฐ์ฒด์ ์ญํ ๊ณผ ์ฑ ์์ ๋ํด ์ข ๋ ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ์ฝ๋ฉํธ ํ์ธ๋ถํ๋๋ ค์~
- View์ ๋ชจ๋ ๋ฉ์๋๋ฅผ static์ผ๋ก ๋ณํํ ๊ฒ
๋ณํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ...
ํ์ง๋ง ํ์ฅ์ฑ ์ธก๋ฉด์ ์๊ฐํด์, ๊ฐ์ฒด๋ก ๋๋๊ฒ ๋์๊ฐ ๊ณ ๋ฏผ๋ ๋ฉ๋๋ค... ์ง๊ธ ๊ท๋ชจ์์๋ ๊ด์ฐฎ์๊น์? ์๋๋ฉด ์ง๊ธ ๋ฐ๋ก ์ฑ๊ฒจ์ผ ํ ํ์ฅ์ฑ์ผ๊น์?
๊ฐ์ฒด๋ก ๋๋ฉด ์ด๋ค ํ์ฅ์ฑ์ ๊ฐ์ง ์ ์์๊น์??
- Position ๊ด๋ฆฌ์ ๋ํด ...
Position์ โ๋๋ฉ์ธ ๊ฐ ๊ฐ์ฒดโ๋ก ๋ด๋ ๋๋์ง, ์๋๋ฉด ๋๋ฌด ๋ฒ์ฉ์ ์ผ๋ก ์ฐ๊ณ ์๋์ง ๋ฆฌ๋ทฐ์ด๋์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
์๋ฒ๋ ๋๋ฉ์ธ์ด ๋ญ๋ผ๊ณ ์๊ฐํ์๋์? ๋๋ฉ์ธ ๊ฐ ๊ฐ์ฒด๋ ์ ๋ง๋๋ ๊ฒ์ผ๊น์? ๊ด๋ จ ์ฝ๋ฉํธ๋ ๋ง์ด ๋จ๊ฒจ๋จ์ต๋๋ค!
- move()์ canMove()์ ์ฑ ์ ๋ถ๋ฆฌ์ ๋ํด
์ ๋ ์ง๊ธ์ ๊ฒ์ฆ(canMove)๊ณผ ์ํ ๋ณ๊ฒฝ(move)์ ๋ถ๋ฆฌํ๋ ์ชฝ์ ์ ํํ๋๋ฐ, ์ด ๋ถ๋ฆฌ๊ฐ ์ ์ ํ์ง ๊ถ๊ธํฉ๋๋ค.
์๋ฒ๋ ์ฑ ์์ด ๋ญ๋ผ๊ณ ์๊ฐํ์๋์? ์์ ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ฆ์ด ์๋๋ฐ ๊ทธ๊ฑธ ์ฑ ์์ด ์๋ค๊ณ ํ ์ ์์๊น์?
- ์๋ก์ด ๊ฐ์ฒด ์์ฑ์ ๋ํด
์ด๋ฒ ๊ตฌํ์์๋ ์ด๋๊น์ง ๊ฐ๋ณ์ผ๋ก ๋๊ณ , ์ด๋๋ถํฐ ๋ถ๋ณ์ผ๋ก ๋์ง ๊ณ ๋ฏผ์ด ์์์ต๋๋ค. ...
๋ค๋ง ์ด๋ฐ ์์ผ๋ก ์ค๊ณํ๋ค๋ณด๋ ๊ฐ๊ฐ์ Turn ๋ด๋ถ์ ๊ธฐ๋ก์ด ์ธ๋ถ์์ ๋ฐ๋์ง ์๊ฒ ํ๊ธฐ ์ํด ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํ๋๋ก ํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ์ต์ ์ ๋ฐฉ๋ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
์๋ฒ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ถ๋ณ์ผ๋ก ๋์ จ๋์? ๊ฐ๋ณ ๊ฐ์ฒด์์ ์ฅ๋จ์ ์ ๋ฌด์์ผ๊น์??
| @@ -0,0 +1,16 @@ | |||
| package janggi.domain.piece; | |||
|
|
|||
| import janggi.domain.Board; | |||
There was a problem hiding this comment.
Piece๊ฐ Board๋ฅผ ์์กดํ๊ณ Board๋ Piece๋ฅผ ์์กดํ๊ณ ์๋ค์. ์ด๋ฐ ์ํ์ฐธ์กฐ๊ฐ ์ด๋ฃจ์ด์ง๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์์๊น์?
There was a problem hiding this comment.
์ถํ์ Board์ ๋ฉ์๋๋ช ์ด ๋ณ๊ฒฝ๋๋ฉด Piece์์๋ ๋ณ๊ฒฝ์ ํด์ค์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด Board๊ฐ ํ์ํ ๋ก์ง๋ค์ Board๋ก ์ฎ๊ธฐ๊ณ ๊ทธ ๋ก์ง์์ ํ์ํ ์ ๋ณด๋ค์ Piece๋ก๋ถํฐ ๋ฐ์์ค๋๋ก ์์ ํ์ต๋๋ค!
๊ทธ๋ฌ๋ ํ์ฌ ๋ก์ง์ด ๊น๋ํ๋ค๋ ์๊ฐ์ ๋ค์ง ์๋๋ฐ์, ํน์ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค:)
| private boolean isSamePosition(int startX, int startY, int endX, int endY) { | ||
| return startX == endX && startY == endY; | ||
| } | ||
|
|
||
| private boolean isStraightDirection(int startX, int startY, int endX, int endY) { | ||
| return startX == endX || startY == endY; | ||
| } |
There was a problem hiding this comment.
์ขํ๊ฐ ๊ฐ์์ง ์ง์ ์ธ์ง ํ๋จํ๋ ๊ฒ์ ๋๊ตฌ์ ์ฑ ์์ผ๊น์? ํ๋จํ๋๋ฐ ์ด๋ค ์ ๋ณด๊ฐ ํ์ํ๊ณ ํด๋น ์ ๋ณด๋ ๋๊ฐ ์ ์ผ ์ ์๊ณ ์๋์ง ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!
There was a problem hiding this comment.
์ขํ ๊ด๋ จ ์ฐ์ฐ์ ์ขํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ Position์ ์์ฒญํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ฌ ์์ ํ์ต๋๋ค!
| private boolean isSamePosition(int distanceX, int distanceY) { | ||
| return distanceX == 0 && distanceY == 0; | ||
| } | ||
|
|
||
| private boolean isOneStep(int distanceX, int distanceY) { |
There was a problem hiding this comment.
์ฌ๊ธฐ๋ ์ด ๋ฉ์๋๋ ๋๊ฐ ์ ์ผ ์ ์ ๊ณตํ ์ ์์์ง ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!
Cha์ ์ค๋ณต๋ ๋ฉ์๋๋ ์๋ค์.
There was a problem hiding this comment.
ํด๋น ๋ก์ง๋ ์ขํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ Position ๊ฐ์ฒด์์ ๋ด๋นํ๋ ๊ฒ์ด ์ ํฉํ๋ค๊ณ ์๊ฐํ์ฌ Position ๊ฐ์ฒด๋ก ์ฎ๊ฒผ์ต๋๋ค!
| .findFirst(); | ||
| } | ||
|
|
||
| private boolean isSamePosition(int distanceX, int distanceY) { |
| private List<MovePath> createPaths() { | ||
| if (teamType == TeamType.HAN) { | ||
| return List.of( | ||
| new MovePath(List.of(Delta.createDown())), | ||
| new MovePath(List.of(Delta.createLeft())), | ||
| new MovePath(List.of(Delta.createRight())) | ||
| ); | ||
| } | ||
| return List.of( | ||
| new MovePath(List.of(Delta.createUp())), | ||
| new MovePath(List.of(Delta.createLeft())), | ||
| new MovePath(List.of(Delta.createRight())) | ||
| ); | ||
| } |
There was a problem hiding this comment.
๋งค๋ฒ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์์์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ ์ข์ ๊ฒ ๊ฐ์์. ๋ค๋ฅธ Piece์ ๊ฒฝ๋ก ๋ฆฌ๋ทฐ๋ ์๋ตํฉ๋๋ค.
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ ๋๋ก ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ๋์ง ์๋ ๊ฐ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์์ฑํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์ด, ๊ฐ ํด๋์ค์ List๋ฅผ ์์๋ก ๊ฐ์ง๋๋ก ์์ ํ์ต๋๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ MovePath๊ฐ์ฒด๊ฐ ํ๋ก๊ทธ๋จ ์คํ ์ ํ ๋ฒ๋ง ์์ฑ๋๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
์ฒ์์๋ PieceType์ด๋ผ๋ enum ํด๋์ค์ ํ๋๋ก List๋ฅผ ๋ฐํํ๋ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊น๋ ๊ณ ๋ คํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ๊ธฐ๋ฌผ์ ์ด๋ ๋ฐฉ์์ด ์์ ๋ ๋ ๋ณ๊ฒฝํด์ผํ ๊ณณ์ ๊ฐ์๋ฅผ ๋ฐ์ก์ ๋, List๋ฅผ enum ํด๋์ค์ ํ๋์ ๋๋, ๊ฐ ๊ธฐ๋ฌผ ํด๋์ค์ ์์๋ก ๋๋ ๋ณ๊ฒฝํ ๊ณณ์ ๊ฐ์๋ ์ฐจ์ด๊ฐ ์๋ค๋ ์๊ฐ์ด ๋ค์ด, ์๋์ ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋จํ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
ํน์ ์ ๊ฐ ์๊ฐํ ๋ฐฉ๋ฒ ์ธ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
| private Board createMovedBoard(TeamType currentTeamType, Team updatedCurrentTeam, Team updatedOpponentTeam) { | ||
| if (currentTeamType == TeamType.CHU) { | ||
| return new Board(updatedCurrentTeam, updatedOpponentTeam); | ||
| } | ||
| return new Board(updatedOpponentTeam, updatedCurrentTeam); | ||
| } |
There was a problem hiding this comment.
Board๋ฅผ ๋ถ๋ณ๊ฐ์ฒด๋ก ๋ง๋ค๋ฉด ์ด๋ค ์ฅ์ ์ด ์๋์??
There was a problem hiding this comment.
ํ์ฌ List์ ํตํด ๊ธฐ๋ณด๋ฅผ ๊ธฐ๋กํ๋๋ก ์ค๊ณ๋ฅผ ํ๊ณ , ๊ฐ Turn ์์๋ ํด๋ง๋ค์ Board ์ํ๊ฐ ํ๋๋ก ์กด์ฌํฉ๋๋ค.
์ด Board๋ฅผ ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ง๋ค๋ฉด ๋ค๋ฅธ Turn์์์ Board ๋ณ๊ฒฝ์ด ์ด์ Turn์ Board์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ๋๊ณ , ์ด๋ก ์ธํด ๊ฐ ํด์์์ Board ์ํ๋ฅผ ์จ์ ํ ๋ณด์กดํ ์ ์์ต๋๋ค!
| @@ -0,0 +1,52 @@ | |||
| package janggi.domain; | |||
|
|
|||
| public class Delta { | |||
There was a problem hiding this comment.
Delta์ Position์ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น์?
There was a problem hiding this comment.
Delta๋ ๋๋ฑ์ฑ์ ๋ณด์ฅํ์ง ์์ ์ด์ ๋ ๋ญ๊น์?
There was a problem hiding this comment.
Position์ ๊ธฐ๋ฌผ๋ค์ ์์น ์ขํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ด๊ณ , Delta๋ ๋จ์ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ฒด์
๋๋ค.
Delta ๊ฐ์ฒด๋ผ๋ฆฌ ๋น๊ตํ๋ ์ฝ๋๊ฐ ์์ด์ ๋ฐ๋ก ๋๋ฑ์ฑ์ ๋ณด์ฅํ์ง ์์๋ ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ Delta ๊ฐ์ฒด๋ ๋ด๋ถ์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ๊ฐ๋ค๊ณ ๋ณด๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋๋ฑ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ๋ง๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
Delta๋ฅผ enum ํด๋์ค๋ก ๋ณ๊ฒฝํ๋ฉด์ ๋๋ฑ์ฑ์ ๋ณด์ฅํ๋๋ก ์์ ํ์ต๋๋ค!
์ถ๊ฐ๋ก ๋ด๋ถ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋๋ฑ์ฑ์ ํ๋จํ๋ค๋ ๋ฉด์์๋ Position๊ณผ Delta์ ์ฐจ์ด๋ ์๋ค๋ ์๊ฐ์ด ๋ค์๋๋ฐ, ํน์ ํ๋ ธ๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
| public static Delta createUp() { | ||
| return new Delta(0, 1); | ||
| } |
There was a problem hiding this comment.
createUp์ ํธ์ถํ ๋๋ง๋ค Delta ์ธ์คํด์ค๋ฅผ ๊ณ์ ์๋ก ๋ง๋ค์ด์ผํ ๊น์?
There was a problem hiding this comment.
Delta ๊ฐ์ฒด๋ ํ ๋ฒ ์์ฑ๋๋ฉด ๋ฐ๋์ง ์๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ enum ํด๋์ค๋ก ๋ณ๊ฒฝํ์ฌ ๊ณ์ํด์ ์๋กญ๊ฒ ์์ฑํ ํ์๊ฐ ์๋๋ก ์์ ํ์ต๋๋ค!
| private int totalDx() { | ||
| return path.stream() | ||
| .mapToInt(Delta::dx) | ||
| .sum(); | ||
| } | ||
|
|
||
| private int totalDy() { | ||
| return path.stream() | ||
| .mapToInt(Delta::dy) | ||
| .sum(); | ||
| } |
There was a problem hiding this comment.
MovePath๋ณด๋ค ๋ ์ ์ํํ ์ ์๋ ๊ฐ์ฒด๊ฐ ์์ ๊ฒ ๊ฐ์์!
There was a problem hiding this comment.
MovePath๊ฐ List๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ผ๊ธ ์ปฌ๋ ์
์ด๋ผ๊ณ ์๊ฐํด์ Delta๋ค์ ํฉ์ ๊ตฌํ๋ ๋ก์ง์ MovePath์์ ๋ด๋นํ๋ ๊ฒ์ด ์ ํฉํ๋ค๋ ์๊ฐ์ด ๋๋๋ฐ์,
์ ๊ฐ ๋ฏธ์ฒ ์๊ฐํ์ง ๋ชป ํ ๋ถ๋ถ์ด ์๋์ง ๋ง์ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
| public boolean matches(int dx, int dy) { | ||
| return totalDx() == dx && totalDy() == dy; | ||
| } | ||
|
|
||
| public boolean matchesDirection(int dx, int dy) { |
View๋ฅผ ๊ฐ์ฒด๋ก ๋๋ฉด ์ถํ์ ์ฝ์ ํ๋ฉด์ด ์๋ ๋ค๋ฅธ ์ข ๋ฅ์ ํ๋ฉด์ผ๋ก ๋ฐ๋์์ ๋ ๋คํ์ฑ์ ํ์ฉํ์ฌ ๊ฐ์ฒด๋ง ๊ฐ์๋ผ์๋ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ static ๋ฉ์๋์ ๊ฒฝ์ฐ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋คํ์ฑ์ ํ์ฉํ์ง ๋ชป ํ๋ ๋จ์ ์ด ์กด์ฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ฉ์ธ์ ์ฝ๋๋ฅผ ์ง๊ธฐ ์ ์ ์ดํดํด์ผ ํ๋ ํน์ ๋ถ์ผ์ ์ง์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋จ์ํ ๊ฐ์ฒด์ ๋๋ฉ์ธ ์ง์์ด ๋ค์ด๊ฐ๋ ์๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ Position ๊ฐ์ฒด์ ๋
น์ฌ์ง ๋๋ฉ์ธ ์ง์์ "Position์ ์ขํ๋ก ์ด๋ฃจ์ด์ ธ ์์ด์ผ ํ๋ฉด ๊ฐ ์
๋ ฅ๊ฐ์ ์ซ์์ฌ์ผ ํ๋ค" ์ ๋์
๋๋ค. ์ด๋ฐ ์ํ์ Position ๊ฐ์ฒด๋ฅผ View๋จ์์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ณผ์ฐ ์ ํฉํ ๊ฒ์ผ์ง ๊ถ๊ธํฉ๋๋ค.
canMove๋ฅผ ํตํด ๋ชฉ์ ์ง ์ขํ๋ฅผ ์ฌ์ ๋ ฅ๋ฐ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์ ํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค!
๊ฐ Turn์ ์ ๋ณด๋ค์ด ๋ค๋ฅธ Turn์ ์ํด ๋ฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋์์ต๋๋ค. |
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
1. View์ ๋ชจ๋ ๋ฉ์๋๋ฅผ static์ผ๋ก ๋ณํํ ๊ฒ
๋ณํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ตณ์ด ์ํ๊ฐ ์๊ณ , ์ ํธ๋ฆฌํฐ์ฑ ํด๋์ค์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค.
์ ์ ์ ๋ ฅ์ด ๋ ๋๊น์ง retryํ๋ ActionExecutor๋ฅผ ์ถ๊ฐํ๋๋ฐ, ์ด ๋์๋ OutputView๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด ๋ฌด์๋ฏธํ๋ค๊ณ ๋๊ปด์ก์ต๋๋ค.
ํ์ง๋ง ํ์ฅ์ฑ ์ธก๋ฉด์ ์๊ฐํด์, ๊ฐ์ฒด๋ก ๋๋๊ฒ ๋์๊ฐ ๊ณ ๋ฏผ๋ ๋ฉ๋๋ค... ์ง๊ธ ๊ท๋ชจ์์๋ ๊ด์ฐฎ์๊น์? ์๋๋ฉด ์ง๊ธ ๋ฐ๋ก ์ฑ๊ฒจ์ผ ํ ํ์ฅ์ฑ์ผ๊น์?
2. Position ๊ด๋ฆฌ์ ๋ํด
Position์ ์ขํ๊ฐ์ ๊ฐ์ง๋ ๋ถ๋ณ ๊ฐ์ฒด์ด๊ณ , ๊ฐ ๊ธฐ๋ฐ ๋น๊ต๋ฅผ ์ํด equals/hashCode๋ฅผ ์ฌ์ ์ํ์ต๋๋ค.
ํ์ฌ๋ ์ฌ๋ฌ ๊ณณ์์ ์๋ก ์์ฑํด์ Map์ key๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
Position์ โ๋๋ฉ์ธ ๊ฐ ๊ฐ์ฒดโ๋ก ๋ด๋ ๋๋์ง, ์๋๋ฉด ๋๋ฌด ๋ฒ์ฉ์ ์ผ๋ก ์ฐ๊ณ ์๋์ง ๋ฆฌ๋ทฐ์ด๋์ ์๊ฒฌ์ด ๊ถ๊ธํฉ๋๋ค.
3. move()์ canMove()์ ์ฑ ์ ๋ถ๋ฆฌ์ ๋ํด
ํ์ฌ ์ฝ๋๋ canMove()๋ก ๋จผ์ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ ๋ค, ๊ทธ ๋ค์ move()๋ฅผ ํธ์ถํ๋ ๊ตฌ์กฐ์ ๋๋ค.
์ด ๋ฐฉ์์ ํธ์ถํ๋ ์ชฝ์ด โ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๋จผ์ ํ์ธํด์ผ ํ๋คโ๋ ์ฌ์ค์ ์์์ผ ํ๋ค๋ ์ ์์ ๊ณ ๋ฏผ์ด ๋์์ต๋๋ค.
move() ๋ด๋ถ์์ canMove()๋ฅผ ํธ์ถํ๋๋ก ๋ง๋ค ์๋ ์๋ค๊ณ ์๊ฐํ๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ฒ์ฆ๊ณผ ์ํ ๋ณ๊ฒฝ์ด ํ ๋ฉ์๋์ ํจ๊ป ๋ค์ด๊ฐ๋ฉด์ ์ฑ ์์ด ์์ธ๋ค๋ ์๊ฐ์ ํ์ต๋๋ค.
์ ๋ ์ง๊ธ์ ๊ฒ์ฆ(canMove)๊ณผ ์ํ ๋ณ๊ฒฝ(move)์ ๋ถ๋ฆฌํ๋ ์ชฝ์ ์ ํํ๋๋ฐ, ์ด ๋ถ๋ฆฌ๊ฐ ์ ์ ํ์ง ๊ถ๊ธํฉ๋๋ค.
ํนํ ์๋ ๊ด์ ์์ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
4. ์๋ก์ด ๊ฐ์ฒด ์์ฑ์ ๋ํด
์ด๋ฒ ๊ตฌํ์์๋ ์ด๋๊น์ง ๊ฐ๋ณ์ผ๋ก ๋๊ณ , ์ด๋๋ถํฐ ๋ถ๋ณ์ผ๋ก ๋์ง ๊ณ ๋ฏผ์ด ์์์ต๋๋ค.
ํ์ฌ๋ JanggiGame๋ง ๊ฐ๋ณ ๊ฐ์ฒด๋ก ๋๊ณ , Turn, Board ๋ฑ ํ์ ๋๋ฉ์ธ ๊ฐ์ฒด๋ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ถ๋ณ์ ์๋๋ก ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
์ถํ ๊ธฐ๋ณด ์กฐํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ณํ์ผ๋ก Turn๋ง๋ค ๋ณด๋ํ์ ๊ฐ์ง๊ณ ์๊ฒ ํ๋ ค๊ณ ์ค๊ณํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค๋ง ์ด๋ฐ ์์ผ๋ก ์ค๊ณํ๋ค๋ณด๋ ๊ฐ๊ฐ์ Turn ๋ด๋ถ์ ๊ธฐ๋ก์ด ์ธ๋ถ์์ ๋ฐ๋์ง ์๊ฒ ํ๊ธฐ ์ํด ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํ๋๋ก ํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ์ต์ ์ ๋ฐฉ๋ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.