Bowling Score
- snippet.java
package main; public class start { public static void main(String[] args) { // TODO Auto-generated method stub BowlingGame bg = new BowlingGame(); bg.start(); } }
- snippet.java
package main; public class BowlingGame { BowlingManager bm = new BowlingManager(); public void start() { // TODO Auto-generated method stub while (false == bm.isEnd()) { bm.playFrame(); bm.printScore(); } } }
- snippet.java
package main; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class BowlingManager { List<Frame> mListFrmae = new ArrayList<Frame>(); final int TOTAL_FRAME_COUNT = 10; final int STRIKE_SCORE = 10; final int MAXIMUM_FRAME = 12; int mCurrentFrame = 0; boolean mIsEnd = false; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public boolean isEnd() { return mIsEnd; } public void playFrame() { // TODO Auto-generated method stub mCurrentFrame++; Frame f = new Frame(mCurrentFrame); mListFrmae.add(f); // ask first score int firstScore = getScore(mCurrentFrame + " Frmae, First Score:"); f.setFirstScore(firstScore, mListFrmae); // if not strike, ask second score if (firstScore != STRIKE_SCORE) { int secondScore = getScore(mCurrentFrame + " Frame, Second Score:"); f.setSecondScore(secondScore, mListFrmae); } // 종료를 판단한다. if (mCurrentFrame >= TOTAL_FRAME_COUNT) { if (mCurrentFrame == TOTAL_FRAME_COUNT){ if (f.mIsSpare || f.mIsStrike) { mIsEnd = false; } else { setEndFlag(); } } else if (mCurrentFrame == TOTAL_FRAME_COUNT + 1) { if (f.mIsStrike) { mIsEnd = false; } else { setEndFlag(); } } else{ setEndFlag(); } } } private void setEndFlag() { mIsEnd = true; } private int getScore(String msg) { System.out.println(msg); int score = 0; try{ score = Integer.parseInt(br.readLine()); }catch(NumberFormatException nfe){ System.err.println("Invalid Format!"); }catch(IOException e){ System.err.println("Read Error"); } return score; } public void printScore() { int totalScore = 0; for (int i =0; i < mListFrmae.size(); i++){ Frame f = mListFrmae.get(i); String currentScore = ""; if (f.mIsStrike) { currentScore = "X"; } else if (f.mIsSpare) { currentScore = f.mFirstScore + "-/"; } else { currentScore = f.mFirstScore + "-" + f.mSecondScore; } String totalScoreShow = ""; totalScore += f.mFirstScore + f.mSecondScore + f.mAdditionalPoint; totalScoreShow = totalScore + ""; if (f.mAddPointCount != 0) { totalScoreShow = ""; } if (f.mFrame <= TOTAL_FRAME_COUNT) { System.out.println(f.mFrame + " Frame:\t" + currentScore + "\tTotal:"+totalScoreShow); } } } }
- snippet.java
package main; import java.util.List; public class Frame { int mFrame; int mFirstScore; int mSecondScore; int mAdditionalPoint; int mAddPointCount = 0; final int ADD_POINT_STRIKE = 2; final int ADD_POINT_SPARE = 1; boolean mIsStrike = false; boolean mIsSpare = false; final int STRIKE_SCORE = 10; public Frame(int currentFrame) { mFrame = currentFrame; } public void setFirstScore(int firstScore) { mFirstScore = firstScore; if (mFirstScore == STRIKE_SCORE) { mIsStrike = true; mAddPointCount = ADD_POINT_STRIKE; } } public void setSecondScore(int secondScore) { mSecondScore = secondScore; if (mIsStrike == false && mFirstScore + mSecondScore == STRIKE_SCORE) { mIsSpare = true; mAddPointCount = ADD_POINT_SPARE; } } public int getFirstScore() { return mFirstScore; } public void setFirstScore(int firstScore, List<Frame> mListFrmae) { // TODO Auto-generated method stub setFirstScore(firstScore); Frame beforeFrame = getBeforeFrame(mListFrmae, 1); if (beforeFrame == null) return; if (beforeFrame.mIsSpare) { beforeFrame.addAdditionalPoint(firstScore); } else if (beforeFrame.mIsStrike){ beforeFrame.addAdditionalPoint(firstScore); Frame b2Frame = getBeforeFrame(mListFrmae, 2); if (b2Frame == null) return; if (b2Frame.mIsStrike) { b2Frame.addAdditionalPoint(firstScore); } } } private Frame getBeforeFrame(List<Frame> mListFrmae, int diff) { if (mListFrmae.size() >= diff + 1) { return mListFrmae.get(mListFrmae.size() - (diff+1)); } return null; } private void addAdditionalPoint(int addScore) { mAdditionalPoint += addScore; mAddPointCount += -1; } public void setSecondScore(int secondScore, List<Frame> mListFrmae) { // TODO Auto-generated method stub setSecondScore(secondScore); Frame beforeFrame = getBeforeFrame(mListFrmae, 1); if (beforeFrame == null) return; if (beforeFrame.mIsStrike) { beforeFrame.addAdditionalPoint(secondScore); } } }
관련 문서
Plugin Backlinks: 아무 것도 없습니다.