// Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the GNU General Public License version 2 or later.
package eg.bowling;
public class BowlingScorer
{
private int[] rolls = new int[21];
protected int rollNumber = 0;
public void roll(int pins)
{
rolls[rollNumber++] = pins;
}
public int score(int frame)
{
int score = 0;
int roll = 0;
for(int f = 0; f < frame; f++)
{
if(strike(roll))
{
score += 10 + nextTwoBallsForStrike(roll);
roll++;
}
else if(spare(roll))
{
score += 10 + nextBallForSpare(roll);
roll += 2;
}
else
{
score += ballsInFrame(roll);
roll += 2;
}
}
return score;
}
private int ballsInFrame(int roll)
{
return rolls[roll] + rolls[roll + 1];
}
private int nextBallForSpare(int roll)
{
return rolls[roll + 2];
}
private int nextTwoBallsForStrike(int roll)
{
return (rolls[roll + 1] + rolls[roll + 2]);
}
private boolean spare(int roll)
{
return rolls[roll] + rolls[roll + 1] == 10;
}
private boolean strike(int roll)
{
return rolls[roll] == 10;
}
protected boolean lastRollWasStrike()
{
return rolls[rollNumber - 1] == 10;
}
protected boolean lastRollWasSpare()
{
return rolls[rollNumber - 2] + rolls[rollNumber - 1] == 10;
}
}
|