Creative Code

bowling.c(볼링 점수 계산) 본문

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;
}