Creative Code

main.c(볼링보드판) 본문

C Programming

main.c(볼링보드판)

빛하루 2023. 8. 24. 16:06

※main.c파일

#include <stdio.h>
#include "board.h"

int main(void)
{
	int frameScores[11] = {0,};
	int scores[11][3] = {0,};
	printBoard();
	for (int i = 1; i<=10; i++){
		printf("%d frame first cast : ", i);
		scanf("%d",&scores[i][1]);
		setScore(i,1,scores[i][1]);
		
		if (i>=2 && scores[i-1][1] != 10 && scores[i-1][1] + scores[i-1][2] == 10) {
			int bonus = scores[i][1];
			frameScores[i-1] = frameScores[i-2] +10 +bonus;
			
			//printf("%d frameScore :%d\n", i-1, frameScores[i-1]);
			setFrameScore(i-1,frameScores[i-1]);
		
		} else if (i>=3 && scores[i-2][1] == 10 && scores[i-1][1] == 10){
			int bonus = 10 + scores[i][1];
			frameScores[i-2] = frameScores[i-3] + 10 + bonus;
			//printf("%d frameScore : %d\n",i-2, frameScores[i-2]);
			setFrameScore(i-2,frameScores[i-2]);
		}
		printBoard();

		if (i == 10 || scores[i][1] != 10){
			printf("%d frame second cast : ",i);
			scanf("%d",&scores[i][2]);
			setScore(i,2,scores[i][2]);
			
			if (i>=2 && scores[i-1][1] == 10){
				int bonus = scores[i][1] + scores[i][2];
				frameScores[i-1] = frameScores[i-2]+10+bonus;
				
				//printf("%d frameScore : %d\n", i-1, frameScores[i-1]);
				setFrameScore(i-1,frameScores[i-1]);
			}
			
			if (scores[i][1] + scores[i][2] <10){
				frameScores[i] = frameScores[i-1] + scores[i][1] + scores[i][2];
				
				//printf("%d frameScore :%d\n",i,frameScores[i]);
				setFrameScore(i,frameScores[i]);
			}
			
		}
		
		// 10 frame third cast???
		if (i == 10 && scores[i][1] + scores[i][2] >= 10) {
			int thirdCast;
			
			printf("%d frame third cast : ",i);
			scanf("%d",&thirdCast);
			setScore(10,3,thirdCast);
			
			frameScores[i] = frameScores[9] + scores[i][1] + scores[i][2] + thirdCast;
			
			//printf("%d frameScore : %d\n", i, frameScores[i]);
			setFrameScore(i,frameScores[i]);
		}
		printBoard();
	}
	return 0;
}

※board.h파일

#ifndef BOARD_H
#define BOARD_H

void printBoard(void);
void setFrameScore(int frame, int frameScore);
void setScore(int frame, int cast, int score);
#endif

※board.c파일

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char board[7][44] = {
	" ----------------------------------------- ",
	"| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10  |",
	" ----------------------------------------- ",
	"| | | | | | | | | | | | | | | | | | | | | |",
	" ----------------------------------------- ",
	"|   |   |   |   |   |   |   |   |   |     |",
	" ----------------------------------------- "
};

void setScore(int frame, int cast, int score)
{
	// '0' ~ '9' or '/' or 'X'
	char ch;
	 if (cast == 2 && (board[3][4*(frame-1)+1] - '0') + score == 10) {
		ch = '/';
	} else if (cast == 1 && score == 10 || frame == 10 && score == 10) {
		ch = 'X';
	} else {
		ch = score + '0';
	}
	board[3][4*(frame-1) +2*(cast-1)+1] = ch;
}

void setFrameScore(int frame, int frameScore)
{
	char buf[4];
	sprintf(buf, "%3d",frameScore); // framescore가 문자열배열에 출력
	strncpy(&board[5][4*(frame-1)+1],buf,3);  // 문자열중에 3개만 복사 (널문자 제외)
}

void printBoard(void)
{
	 system("clear");
	 for (int i = 0; i<7; i++){
	 	printf("%s\n",board[i]);
	 }
}

'C Programming' 카테고리의 다른 글

variantArray.c(malloc)  (0) 2023.08.25
main.c(스택)  (0) 2023.08.24
stringArray.c(문자열배열-이중포인터)  (0) 2023.08.08
hello7.c(문자열 배열-포인터)  (0) 2023.08.08
atoi.c(문자열을 숫자로 출력)  (0) 2023.08.07