2018-4-21 Bowling (2)

볼링구현하기 2번째

//Frame class
public Status shoot(int pinFall) {
        if (firstPin == null) {
            firstPin = new Pin(pinFall);
            return new Default(firstPin);
        }
        secondPin = new Pin(pinFall);
        return checkStatus();
    }
  • 로또에서 당첨번호와 로또를 매치를 할때 바로 등수를 리턴해주는 메소드를 구현했었다. 볼링에서는 어떻게할까하다가 처음에는 최종상태값을 리턴해주는 메소드를 구현을 해주었다가, 첫번째 상태값은 Default or Strike 두번째 상태값을 판별해주는 메소드를 만들었다. shoot을 날리는 순간 상태값을 리턴해주는 역할로 전환했다.
//Default class
public class Default extends Status {
    public Default(Pin firstPin) {
        super(firstPin);
    }

    @Override
    public String toString() {
        return "  " + String.valueOf(getFirstPin().getPinFall());
    }
}
  • Default메소드클래스는 첫번째 shoot에서 Strike가 아닌경우에는 디폴트로 상태값이 나온다.
// Game class
public List<Status> running(int i, String name) {
        FrameManager manager = new FrameManager();
        Input input = new Input();
        Frame frame = manager.onFrame(input.inputNum(i));
        Status status = frame.checkStatus();
        statuses.add(status);
        ResultView.upperBar(getStatuses(), name, getFrames());
        if (frame.finishFrame()) {
            statuses.add(status);
            ResultView.upperBar(getStatuses(), name, getFrames());
            return statuses;
        }
        frame = manager.onFrame(input.inputNum(i));
        status = frame.checkStatus();
        statuses.add(status);
        ResultView.upperBar(getStatuses(), name, getFrames());
        return statuses;
    }
  • 결과값을 UI출력을 할때 어떻게할까 고민을 했었다. 이전에는 한 프레임이 끝날때마다 그것을 저장하는 Frames리스트를 활용을 했었는데, 샷을 날릴때마다 출력을 해야되므로 상태값을 기반으로 값이 콘솔에 출력이 되도록 고민을 했었다.

오늘의 느낀점

  • 볼링에서 상태값이 가지는 의미가 생각보다 큰거같다. 상태값에 따라서 프레임이 다음으로 넘어가는지 유무가 판별이 되고, 상태값으로 생각보다 많은 것들을 할 수 있다는 것을 알게되었다. 이 글을 쓰는 시점에도 이전에는 프레임이 끝나는것을 finishFrame이라는 메소드를 만들어서 유무를 판단했는데, 이제는 status에서 판결을 해서 넘어갈 수 있는거 같다.
  • 최근에는 디자인패턴에 대해서 공부를 하고 있는데, 볼링에서는 이 디자인패턴을 어떻게 적용을 할 수 있을지 고민을 해봐야겠다.
Written on April 21, 2018