敏捷软件开发:原则、模式与实践 一次编程实践 保龄球记分代码


//类Score
package com.java.bowlingscore;
public class Scorer {
public void addThrow(int pins){
itsThrows[itsCurrentThrow++]=pins;
}
public int scoreForFrame(int theFrame){  
int score = 0;
ball = 0;
for(int currentFrame=0;currentFrame<theFrame;
currentFrame++){
if(strike()){
score +=10 + nextTwoBallsForStrike();
ball++;
}else if(spare()){
 score+=10+nextBallForSpare();
 ball+=2;
}else{
score +=twoBallsInFrame();
ball+=2;
}
}
return score;
}
private boolean strike(){
return itsThrows[ball]==10;
}
private boolean spare() {
return (itsThrows[ball]+itsThrows[ball+1]==10);
}
private int nextTwoBallsForStrike(){
return itsThrows[ball+1]+itsThrows[ball+2];
}
private int nextBallForSpare(){
return itsThrows[ball+2];
}
private int twoBallsInFrame(){
return itsThrows[ball]+itsThrows[ball+1];
}
private int ball;
private int[] itsThrows = new int[21];
private int itsCurrentThrow=0;
}

类Game

package com.java.bowlingscore;
public class Game {
public int score(){
return scoreForFrame(itsCurrentFrame);
}
public int getCurrentFrame(){        
return itsCurrentThrow;
}
public void add(int pins){  
 itsScorer.addThrow(pins);
 adjustCurrentFrame(pins);   
}
private void adjustCurrentFrame(int pins) { 
if(lastBallinFrame(pins)){
advanceFrame();
}else{
firstThrowInFrame = false;
}
}
private boolean lastBallinFrame(int pins) {
return strike(pins)||(!firstThrowInFrame);
}
private boolean strike(int pins) {
return (firstThrowInFrame&&pins==10);
}
private void advanceFrame() {
itsCurrentFrame = Math.min(10, itsCurrentFrame+1);
}
public int scoreForFrame(int theFrame){
return itsScorer.scoreForFrame(theFrame);
}
private Scorer itsScorer = new Scorer();
private boolean firstThrowInFrame=true;
private int itsCurrentFrame=1;
private int itsCurrentThrow=0;
}

捕获.PNG

晚上看着书一步一步敲出的,在代码重构方面学习到了不少,明天自己试着写一个.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章