package kevin.lawrence.bowling; import java.util.ArrayList; import java.util.Iterator; public class Game implements Iterable { public static final int FRAMES_PER_GAME = 10; private ArrayList frames; public Game() { frames = new ArrayList(); Frame frame = null; for(int i = 0; i < FRAMES_PER_GAME; i++) { frame = new Frame(frame, i == FRAMES_PER_GAME - 1); frames.add(frame); } } public void bowl(int pins) { // The current frame is the first one that needs more balls // but is not complete for(Frame frame : frames){ if(frame.needsMoreBalls()){ boolean isCurrentFrame = ! frame.isComplete(); frame.addBall(pins); if(isCurrentFrame) { break; } } } } public boolean isGameOver() { return ! getLastFrame().needsMoreBalls(); } public Iterator iterator(){ return frames.iterator(); } public int getScore() { return getLastFrame().getCumulativeScore(); } public Frame getLastFrame() { return frames.get(frames.size() - 1); } }