Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions docs/03-ladder-play-game.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# ๐Ÿš€ 3๋‹จ๊ณ„ - ์‚ฌ๋‹ค๋ฆฌ(๊ฒŒ์ž„ ์‹คํ–‰)

***

## ์ฝ”๋“œ ๋ฆฌ๋ทฐ

> PR ๋งํฌ :

## ๋‚˜์˜ ํ•™์Šต ๋ชฉํ‘œ

### 1. TDD ์‚ฌ์ดํด์„ ์Šต๊ด€ํ™” ํ•˜์ž.

### 2. ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™์„ ์ค€์ˆ˜ํ•˜์ž.

### 3. ๋„ค์ด๋ฐ ์ž‘์„ฑํ•  ๋•Œ AI๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜์ž.

# ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

- ์‚ฌ๋‹ค๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
- ๊ฐœ์ธ๋ณ„ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด ๊ฐœ์ธ๋ณ„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , "all"์„ ์ž…๋ ฅํ•˜๋ฉด ์ „์ฒด ์ฐธ์—ฌ์ž์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

# ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ

- ์ž๋ฐ” 8์˜ ์ŠคํŠธ๋ฆผ๊ณผ ๋žŒ๋‹ค๋ฅผ ์ ์šฉํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.
- ๊ทœ์น™ 6: ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.
- ๊ทœ์น™ 7: 3๊ฐœ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

# ์‹คํ–‰ ๊ฒฐ๊ณผ

```
์ฐธ์—ฌํ•  ์‚ฌ๋žŒ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”. (์ด๋ฆ„์€ ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„ํ•˜์„ธ์š”)
pobi,honux,crong,jk

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. (๊ฒฐ๊ณผ๋Š” ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„ํ•˜์„ธ์š”)
๊ฝ,5000,๊ฝ,3000

์ตœ๋Œ€ ์‚ฌ๋‹ค๋ฆฌ ๋†’์ด๋Š” ๋ช‡ ๊ฐœ์ธ๊ฐ€์š”?
5

์‚ฌ๋‹ค๋ฆฌ ๊ฒฐ๊ณผ

pobi honux crong jk
|-----| |-----|
| |-----| |
|-----| | |
| |-----| |
|-----| |-----|
๊ฝ 5000 ๊ฝ 3000

๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€?
pobi

์‹คํ–‰ ๊ฒฐ๊ณผ
๊ฝ

๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€?
all

์‹คํ–‰ ๊ฒฐ๊ณผ
pobi : ๊ฝ
honux : 3000
crong : ๊ฝ
jk : 5000
```
27 changes: 25 additions & 2 deletions src/main/java/nextstep/ladder/domain/ladder/LadderGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,34 @@ public class LadderGame {

private final Users users;
private final Lines lines;
private final Rewards rewards;

public LadderGame(Users users, Height height, GenerateLadderLineStrategy generate, Rewards rewards) {
this(users, new Lines(IntStream.range(0, height.getHeight())
.mapToObj(i -> new Line(users.size(), generate))
.collect(Collectors.toList())), rewards);
}

public LadderGame(Users users, Height height, GenerateLadderLineStrategy generate) {
this(users, new Lines(IntStream.range(0, height.getHeight())
.mapToObj(i -> new Line(users.size(), generate))
.collect(Collectors.toList())));
.collect(Collectors.toList())), null);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewards๊ฐ€ null์ธ ์ƒํƒœ์˜ ์‚ฌ๋‹ค๋ฆฌ ํƒ€๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€?
Rewards๊ฐ€ ํ•„์ˆ˜๋ผ๋ฉด ์ด ์ƒ์„ฑ์ž๋Š” ์ œ๊ฑฐํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ?

}

public LadderGame(Users users, Lines lines) {
public LadderGame(Users users, Lines lines, Rewards rewards) {
this.users = users;
this.lines = lines;
this.rewards = rewards;
}

public LadderResults play() {
return new LadderResults(IntStream.range(0, users.size())
.mapToObj(this::generateLadderResult)
.toList());
}

private LadderResult generateLadderResult(int userIndex) {
return new LadderResult(users.getUsers().get(userIndex), rewards.findReward(lines.move(userIndex)));
}

public Users getUsers() {
Expand All @@ -29,4 +47,9 @@ public Users getUsers() {
public Lines getLines() {
return lines;
}

public Rewards getRewards() {
return rewards;
}

}
56 changes: 56 additions & 0 deletions src/main/java/nextstep/ladder/domain/ladder/LadderResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package nextstep.ladder.domain.ladder;

import nextstep.ladder.domain.user.User;

import java.util.Objects;

public class LadderResult {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ‘


private final User user;
private final Reward reward;

public LadderResult(User user) {
this(user, null);
}

public LadderResult(User user, Reward reward) {
this.user = user;
this.reward = reward;
}

public User getUser() {
return user;
}

public Reward getReward() {
return this.reward;
}

public String getUserValue() {
return this.user.getNameValue();
}

public String getRewardValue() {
return this.reward.getReward();
}

@Override
public String toString() {
return "LadderResult{" +
"user=" + user +
", reward=" + reward +
'}';
}

@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
LadderResult that = (LadderResult) o;
return Objects.equals(getUser(), that.getUser()) && Objects.equals(getReward(), that.getReward());
}

@Override
public int hashCode() {
return Objects.hash(getUser(), getReward());
}
}
31 changes: 31 additions & 0 deletions src/main/java/nextstep/ladder/domain/ladder/LadderResults.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package nextstep.ladder.domain.ladder;

import java.util.List;

public class LadderResults {

private List<LadderResult> results;

public LadderResults(LadderResult... results) {
this(List.of(results));
}

public LadderResults(List<LadderResult> results) {
this.results = results;
}

public List<LadderResult> getResults() {
return results;
}

public int size() {
return this.results.size();
}

@Override
public String toString() {
return "LadderResults{" +
"results=" + results +
'}';
}
}
35 changes: 28 additions & 7 deletions src/main/java/nextstep/ladder/domain/ladder/Line.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,45 @@

public class Line {

private List<Boolean> line;
private List<Boolean> lines;

public Line(int row, GenerateLadderLineStrategy generate) {
this.line = generate.generate(row);
this.lines = generate.generate(row);
}

public int size(){
return this.line.size();
public int size() {
return this.lines.size();
}

public List<Boolean> getLine() {
return line;
public List<Boolean> getLines() {
return lines;
}

public int move(int position) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ‘

if (isMoveRight(position)) {
return ++position;
}

if (isMoveLeft(position)) {
return --position;
}

return position;
}

private boolean isMoveRight(int position) {
return position < lines.size() && lines.get(position);
}

public boolean isMoveLeft(int position) {
return position > 0 && lines.get(position - 1);
}

@Override
public String toString() {
return "Line{" +
"line=" + line +
"line=" + lines +
'}';
}

}
13 changes: 12 additions & 1 deletion src/main/java/nextstep/ladder/domain/ladder/Lines.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,26 @@ public class Lines {

private final List<Line> lines;

public Lines(Line... lines) {
this(List.of(lines));
}

public Lines(List<Line> lines) {
this.lines = lines;
}

public int size(){
public int size() {
return this.lines.size();
}

public List<Line> getLines() {
return lines;
}

public int move(int position) {
for (Line line : lines) {
position = line.move(position);
}
return position;
}
}
2 changes: 1 addition & 1 deletion src/main/java/nextstep/ladder/domain/ladder/Position.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

public class Position implements Comparable<Position> {

private final int position;
private int position;

public Position(int position) {
validateNagative(position);
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/nextstep/ladder/domain/ladder/Reward.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package nextstep.ladder.domain.ladder;

import java.util.Objects;

public class Reward {

private final String reward;

public Reward(String reward) {
this.reward = reward;
}

public String getReward() {
return reward;
}

@Override
public String toString() {
return "Reward{" +
"reward='" + reward + '\'' +
'}';
}

@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Reward reward1 = (Reward) o;
return Objects.equals(reward, reward1.reward);
}

@Override
public int hashCode() {
return Objects.hashCode(reward);
}
}
46 changes: 46 additions & 0 deletions src/main/java/nextstep/ladder/domain/ladder/Rewards.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package nextstep.ladder.domain.ladder;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

public class Rewards {

private final List<Reward> rewards;

public Rewards(String rewards) {
this(Arrays.stream(validateReward(rewards).split(","))
.map(Reward::new)
.toList());
}

public Rewards(List<Reward> rewards) {
this.rewards = rewards;
}

public static String validateReward(String reward) {
if (Objects.isNull(reward) || reward.isBlank()) {
throw new IllegalArgumentException("๊ฒฐ๊ณผ ์ž…๋ ฅ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.");
}
return reward;
}

public int size() {
return this.rewards.size();
}

public List<Reward> getRewards() {
return rewards;
}

@Override
public String toString() {
return "Rewards{" +
"rewards=" + rewards +
'}';
}

public Reward findReward(int position) {
return rewards.get(position);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package nextstep.ladder.domain.strategy;

import java.util.List;

public class FixedLadderLineGenerateStrategy implements GenerateLadderLineStrategy {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FixedLadderLineGenerateStrategy์„ ๊ตณ์ด ์ถ”๊ฐ€ํ•˜๊ธฐ๋ณด๋‹ค ๋žŒ๋‹ค๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๋ฉด ์–ด๋–จ๊นŒ?


private final List<Boolean> pattern;

public FixedLadderLineGenerateStrategy(Boolean... pattern) {
this.pattern = List.of(pattern);
}

@Override
public List<Boolean> generate(int size) {
validatePattern(size);
return pattern;
}

private void validatePattern(int size) {
if (size - 1 != pattern.size()) {
throw new IllegalArgumentException("ํŒจํ„ด ํฌ๊ธฐ์™€ ์š”์ฒญ ํฌ๊ธฐ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}
}
}
Loading