# 볼링 게임 점수 계산
- 볼링 게임은 총 10프레임으로 구성되고 매 프레임에 최대 2번까지 볼을 던질 수 있다. 첫 번째 던진 공이 10개 핀을 모두 쓰러뜨리면 '스트라이크(strike)'라고 부르고, 공을 2번 던져서 10개 핀을 모두 쓰러뜨리면 '스페어(spare)'라고 한다.
[점수 계산 규칙]
1. 스트라이크(strike)를 친 경우는 이후 2회 공을 던져서 넘어진 핀의 수를 더해서 점수를 계산한다
2. 스페어(spare)를 친 경우는 이후 1회 공을 던져 넘어진 핀의 수를 더해서 점수를 계산한다
3. 1번과 2번에 해당되지 않는 경우는 해당 프레임에 넘어진 핀의 수를 더해서 점수를 계산한다
4. 마지막 10프레임에 스트라이크를 친 경우에는 2회의 보너스 드로우를, 스페어를 친 경우에는 1회의 보너스 드로우(bonus throw)가 주어진다. 따라서 10프레임과 보너스 프레임을 합쳐서 던질 수 있는 최대 드로우 횟수는 총 3회이다. 10프레임에 스트라이크를 치고 2번의 보너스 프레임에서 모두 스트라이크를 치는 경우 총 30점을 얻을 수 있다(10프레임: 1회(10), 2회(-), 보너스 프레임: 1회(10), 2회(10)). 따라서 볼링 게임의 최대 점수는 300점이 된다. 아래 표는 볼링 게임에서 10프레임과 보너스 프레임에서 발생할 수 있는 경우를 나타낸 점수 계산의 예이다.
[코드]
#include <stdio.h>
#define MAX_FRAME 10
#define STRIKE 0
#define SPARE 1
#define NONE 2
struct frame{
int first;
int second;
int result;
};
struct score{
int first;
int second;
};
struct frame f[MAX_FRAME];
struct score s[11]={8,0,4,3,8,2,4,6,2,6,10,0,9,0,10,0,8,2,10,0,10,10};
int main() {
int i,j, sum=0;
for(i=0;i<MAX_FRAME;i++){
f[i].first = s[i].first;
f[i].second = s[i].second;
if(s[i].first==10){ // Strike
sum+=s[i].first+s[i+1].first+s[i+1].second;
f[i].result = STRIKE;
if(i!=9&&s[i+1].first==10)// 10프레임이 아닌 경우에서 double을 친 경우
sum+=s[i+2].first;
}
else if((s[i].first+s[i].second==10)){ // Spare
f[i].result = SPARE;
sum += s[i].first + s[i].second + s[i+1].first;
}
else{
f[i].result= NONE;
sum+= s[i].first + s[i].second;
}
switch(f[i].result){
case STRIKE:printf("%d/%d : %d STRIKE!\n",s[i].first,s[i].second,sum);break;
case SPARE:printf("%d/%d : %d SPARE!\n",s[i].first,s[i].second,sum);break;
default:printf("%d/%d : %d \n",s[i].first,s[i].second,sum);break;
}
}
if(s[10].first!=0)
printf("(Bonus) : %d, %d)\n", s[10].first, s[10].second);
printf("total : %d\n", sum);
}
[실행결과]
'Study > Data Structure' 카테고리의 다른 글
[DS] Polynomial (다항식) (0) | 2021.08.25 |
---|---|
[DS] 자료구조 개념 및 구현 Chapter 2 연습문제 (0) | 2021.08.25 |
[DS] Array (배열) & Multi-Dimensional Array (다차원 배열) (0) | 2021.08.25 |
[DS] Pointer (포인터) (0) | 2021.08.25 |
[DS] 구조체 (0) | 2021.08.25 |