Skip to content

사다리 게임 2단계 개발 #7

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

Merged
merged 10 commits into from
Nov 18, 2018
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
41 changes: 20 additions & 21 deletions src/main/java/domain/Ladder.java
Original file line number Diff line number Diff line change
@@ -1,41 +1,40 @@
package domain;

import com.google.common.base.Preconditions;
import domain.dto.GamerDTO;
import domain.dto.LadderLayerDTO;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import domain.ladder.LadderLayer;
import domain.ladder.LadderLayers;
import domain.point.LadderPoints;

/**
* Created by hspark on 16/11/2018.
*/
public class Ladder {
public static final int MIN_LADDER_HEIGHT = 1;
public static final int NUMBER_TO_GET_WIDTH = 1;
public static final int MIN_LADDER_WIDTH = 0;

private List<Gamer> gamers;
private List<LadderLayer> ladderLines;
private LadderPoints ladderPoints;
private LadderLayers ladderLayers;

public Ladder(List<String> gamerNameList, int height, LadderLineSupplier supplier) {
Preconditions.checkArgument(height > MIN_LADDER_HEIGHT, "사다리 높이가 너무 낮습니다.");
this.gamers = gamerNameList.stream().map(Gamer::new).collect(Collectors.toList());
this.ladderLines = Stream.iterate(0, i -> i + 1).limit(height)
.map(integer -> new LadderLayer(getWidth(), supplier)).collect(Collectors.toList());
public Ladder(int gamerCount) {
Preconditions.checkArgument(gamerCount >= MIN_LADDER_WIDTH, "게이머 수가 너무 적습니다.");
this.ladderPoints = new LadderPoints(gamerCount);
}

public void drawLadder() {
ladderLines.stream().forEach(LadderLayer::drawLines);
public void drawLadder(int height, LadderLineSupplier supplier) {
Preconditions.checkArgument(height > MIN_LADDER_HEIGHT, "사다리 높이가 너무 낮습니다.");
this.ladderLayers = new LadderLayers(height, ladderPoints.getWidth());
ladderLayers.drawAllLadders(supplier);
}

public LadderResult getLadderGameResult() {
List<LadderLayerDTO> lineDTOList = ladderLines.stream().map(LadderLayer::getLadderLineDTO).collect(Collectors.toList());
List<GamerDTO> gamerDTOList = gamers.stream().map(GamerDTO::of).collect(Collectors.toList());
return new LadderResult(gamerDTOList, lineDTOList);
return new LadderResult(ladderPoints, ladderLayers);
}

private int getWidth() {
return gamers.size() - NUMBER_TO_GET_WIDTH;
public void moveAll() {
int layerNumber = 0;
while (!ladderLayers.isBottomLayer(layerNumber)) {
LadderLayer ladderLayer = ladderLayers.getLayer(layerNumber++);
ladderPoints.moveAll(ladderLayer);
}
}
}
36 changes: 36 additions & 0 deletions src/main/java/domain/LadderGameInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package domain;

import domain.gamer.Gamers;
import domain.point.Point;
import domain.reward.Reward;
import domain.reward.Rewards;

/**
* Created by hspark on 18/11/2018.
*/
public class LadderGameInfo {
public static final String ALL_GAMER = "all";
private Gamers gamers;
private Rewards rewards;

public LadderGameInfo(Gamers gamers, Rewards rewards) {
this.gamers = gamers;
this.rewards = rewards;
}

public Gamers getGamers() {
return gamers;
}

public Rewards getRewards() {
return rewards;
}

public Point findStartPointByGamerName(String gamerName) {
return gamers.findByGamerName(gamerName).getPoint();
}

public Reward getRewardByPoint(Point point) {
return rewards.getRewardByPoint(point);
}
}
41 changes: 0 additions & 41 deletions src/main/java/domain/LadderLayer.java

This file was deleted.

17 changes: 0 additions & 17 deletions src/main/java/domain/LadderLine.java

This file was deleted.

28 changes: 17 additions & 11 deletions src/main/java/domain/LadderResult.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
package domain;

import domain.dto.GamerDTO;
import domain.dto.LadderLayerDTO;
import domain.ladder.LadderLayer;
import domain.ladder.LadderLayers;
import domain.point.Point;
import domain.point.LadderPoints;

import java.util.List;

/**
* Created by hspark on 16/11/2018.
*/
public class LadderResult {
private List<GamerDTO> gamers;
private List<LadderLayerDTO> ladderLines;
private LadderPoints ladderPoints;
private LadderLayers ladderLayers;

public LadderResult(List<GamerDTO> gamers, List<LadderLayerDTO> ladderLines) {
this.gamers = gamers;
this.ladderLines = ladderLines;
public LadderResult(LadderPoints ladderPoints, LadderLayers ladderLayers) {
this.ladderPoints = ladderPoints;
this.ladderLayers = ladderLayers;
}

public List<GamerDTO> getGamers() {
return gamers;
public Point getEndPointByStartPoint(Point point) {
return ladderPoints.findCurrentPointByStartPoint(point);
}

public List<LadderLayerDTO> getLadderLines() {
return ladderLines;
public List<Point> getLadderPoints() {
return ladderPoints.getPoints();
}

public List<LadderLayer> getLadderLayers() {
return ladderLayers.getLadderLayers();
}
}
25 changes: 0 additions & 25 deletions src/main/java/domain/dto/GamerDTO.java

This file was deleted.

18 changes: 0 additions & 18 deletions src/main/java/domain/dto/LadderLayerDTO.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/main/java/domain/dto/LineDTO.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
package domain;
package domain.gamer;

import com.google.common.base.Preconditions;
import domain.point.Point;

/**
* Created by hspark on 16/11/2018.
*/
public class Gamer {
public static final int MAX_GAMER_NAME_LENGTH = 5;

private String name;
private Point point;

public Gamer(String name) {
public Gamer(String name, int position) {
Preconditions.checkArgument(name.length() <= MAX_GAMER_NAME_LENGTH, "이름이 너무 깁니다.");
this.name = name;
this.point = Point.of(position);
}

public String getName() {
return name;
}

public Point getPoint() {
return point;
}

public boolean isEqualName(String gamerName) {
return gamerName == this.name;
}

@Override
public String toString() {
return name;
}
}
38 changes: 38 additions & 0 deletions src/main/java/domain/gamer/Gamers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package domain.gamer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Created by hspark on 18/11/2018.
*/
public class Gamers {
private List<Gamer> gamers;

public Gamers(List<String> gamerValues) {
this.gamers = initGamer(gamerValues);
}

public int size() {
return gamers.size();
}

private List<Gamer> initGamer(List<String> gamerNameList) {
List<Gamer> gamers = new ArrayList<>();
int position = 0;
for (String gamerName : gamerNameList) {
gamers.add(new Gamer(gamerName, position++));
}
return gamers;
}

public Gamer findByGamerName(String gamerName) {
return gamers.stream().filter(gamer -> gamer.isEqualName(gamerName)).findFirst().orElseThrow(IllegalAccessError::new);
}

public List<Gamer> getGamerList() {
return Collections.unmodifiableList(gamers);
}

}
Loading