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