C Programming
bowling.c(볼링 점수 계산)
빛하루
2023. 8. 3. 17:25
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main(void) {
int board[11][4] = { 0 }; // 각 프레임에서 친 점수를 기록한 배열
int index = 0; // board1배열의 인덱스
int total = 0; // 총 점수
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 3; j++) {
printf("%d 번째 프레임의 %d 번째 투구 점수 : ", i, j); // 점수 입력받기
scanf("%d", &board[i][j]);
//스트라이크 처리
if (index >= 2 && j == 1 && board[i - 1][1] == 10 && board[i - 2][1] == 10) { // (10점) , (10점), (a)점 인경우
total += 20 + board[i][j];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i - 2, total);
}
else if (index >= 2 && j == 2 && board[i - 1][1] == 10) { // (10점),(a,b)점인 경우
total += 10 + board[i][1] + board[i][2];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i - 1, total);
}
else if (j == 3 && board[10][1] == 10) { // 10프레임 1번째 투구가 10점인 경우
total += board[10][1] + board[10][2] + board[10][3];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i, total);
}
//스페어 처리
if (index >= 2 && j == 1 && board[i - 1][1] != 10 && board[i - 1][1] + board[i - 1][2] == 10) { // (a,10-a),(b)점 인경우
total += 10 + board[i][1];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i - 1, total);
}
else if (j == 3 && board[10][1] + board[10][2] == 10) { // 10프레임 2번째 투구에서 스페어 처리 되었을경우
total += 10 + board[10][3];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i, total);
}
// 모든 프레임에서 첫번째 투구와 두번째 투구의 합이 9보다 작거나 같은경우 (스페어나 스트라이크 처리가 안되었을 경우)
if (j == 2 && board[i][1] + board[i][2] < 10) {
total += board[i][1] + board[i][2];
printf("%d 프레임의 총 점수는 %d 입니다.\n", i, total);
}
index++;
if (i <= 9 && j == 2) { // 9프레임까지는 최대 2번까지만 투구 할 수 있음
break;
}
else if (i <= 9 && j == 1 && board[i][j] == 10) { // 9프레임까지는 첫번째 투구에서 스트라이크를 치면 다음 프레임으로 넘어감
break;
}
else if (i == 10 && j == 2 && (board[i][1] + board[i][2] < 10)) { //10프레임에서는 첫번째 투구와 두번째 투구를 던졌을 때 스페어나 스트라이크를 쳐야 세번째 투구 기회를 얻을 수 있음
break;
}
}
}
return 0;
}