规则:
保龄球的计分规则:
-
每一局总共有十轮。
-
每一轮共有十支球瓶,最多可以投两球,要尽量在两球之内把球瓶全部击倒。
-
如果第一球就把全部的球瓶都击倒了,也就是“STRIKE”,本轮完成。
STRIKE的得分是10分再加奖励分,奖励分为后面两球的倒瓶数。 -
如果第一球没有全倒时,就要再打一球,如果剩下的球瓶全都击倒,
也就是“SPARE”。 SPARE所得分数为10分再加奖励分,
奖励分为后面一球的倒瓶数。 -
如果第二球也没有把球瓶全部击倒,
分数就是第一球加第二球倒的瓶数。 -
如果到第10轮,如果第10轮为STRIKE或SPARE时,
可以分别继续击球2次或1次, 该额外的击球仅用于奖励分的计数。 -
全部十轮的得分相加就等于这一局的总得分。
实现:
import java.util.Arrays;
/**
* 保龄球的计分规则
*
* @author clown
* @version 1.0
* @date 2021/3/16 12:22
*/
public class Bowling {
/**
* 计数器
*/
int count = 0;
/**
* 存放数据
*/
int[] space = new int[21];
int spaceIndex = 0;
/**
* 计总分
*/
int score;
/**
* 增加
* @param n 每投掷一球推倒的瓶子数目
*/
public void roll(int n) {
space[spaceIndex++] = n;
}
/**
* 获取总轮的分数
*/
public int getScore() {
for (int i = 0; i < space.length; i++) {
int first = space[i];
int second = space[i+1];
int third = space[i+2];
if (first == 10) {
score += 10 + second + third;
} else {
int sum = first + second;
if (sum == 10) {
score += 10 + third;
} else {
score += sum;
}
i++;
}
count++;
if (count == 10) {
break;
}
}
return score;
}
public static void main(String[] args) {
Bowling a = new Bowling();
a.roll(1);
a.roll(2);//3
a.roll(3);
a.roll(4);//7,10
a.roll(5);
a.roll(5);//17,27
a.roll(7);
a.roll(3);//19,46
a.roll(9);
a.roll(1);//20,66
a.roll(10);//15,81
a.roll(2);
a.roll(3);//5,86
a.roll(4);
a.roll(5);//9,95
a.roll(6);
a.roll(4);//18,113
a.roll(8);
a.roll(2);//19,132
a.roll(9);
System.out.println("space = " + Arrays.toString(a.space));
System.out.println("score = " + a.getScore());
}
}
如有疑问,欢迎留言_