Study/리눅스

리눅스 C언어로 컴파일하기 Bowling CUI (2)

차희빈 2014. 9. 17. 17:54



procBoard.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "procBoard.h"
 
static char board[7][70] = {
    " ----------------------------------------  ",
    "| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10  |",
    " ----------------------------------------  ",
    "| | | | | | | | | | | | | | | | | | | | | |",
    " ----------------------------------------  ",
    "|   |   |   |   |   |   |   |   |   |     |",
    " ----------------------------------------  "
};
 
void printBoard(void)
{
    system("clear");    //shell clear command
    int i;
    for(i = 0; i < 7; ++i)
        printf("%s\n", &board[i][0]);    //board[i] + 0 ;  => board[i]
}
 
void setScore(int frame, int index, int score)
{
    char ch;
    if(index == 2 && (board[3][4*(frame-1)+ 1] - '0' + score == 10) )
        ch='/';
    else if( index == 1 && score == 10 ||  frame == 10 && score == 10 )
        ch= 'X';
    else 
        ch = '0' + score;
        
    board[3][4*(frame-1) + 2*(index-1) + 1] = ch;
}
 
void setFrameScore(int frame, int frameScore)
{
    char str[4];
    sprintf( str,  "%3d", frameScore);
    strncpy(board[5] + 4*(frame-1) + 1, str, 3);
}
 



bowling.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
#include "procBoard.h"
 
int main(void)
{
    int scores[10][3]={0};
    int score10[4] = {0};
    int frameScore[11]={0};
    int i;
    
    printBoard();
    for(i=1; i<=9; i++)                    //[1-9 frame]
    {                        
        //first bowling
        printf("%d frame first Score: ",i);
        scanf("%d", &scores[i][1]);    //    scores[i]+1
        setScore(i, 1, scores[i][1]);
        printBoard();
        
        if( (i >= 2) && (scores[i-1][1] != 10) && ((scores[i-1][1] + scores[i-1][2]) == 10) )
        {// i-1 frame = spare
            frameScore[i-1] = frameScore[i-2] + 10 + scores[i][1];
            //printf("%d frameScore: %d\n", i-1, frameScore[i-1]);
            setFrameScore(i-1, frameScore[i-1]);
            printBoard();
        }
        else if( (i >= 3) && (scores[i-2][1] == 10) && (scores[i-1][1] == 10) )
        {// i-2 frame = strike and i-1 frame= strike
            frameScore[i-2] = frameScore[i-3] + 20 + scores[i][1];
            //printf("%d frameScore: %d\n", i-2, frameScore[i-2]);
            setFrameScore(i-2, frameScore[i-2]);
            printBoard();
        }
        
        if(scores[i][1] < 10)
        {
            //second bowling
            printf("%d frame second score: ", i);
            scanf("%d", scores[i]+2);    // scores[i][2]
            setScore(i, 2, scores[i][2]);
            printBoard();
 
            if( (i >= 2) && (scores[i-1][1] == 10) )
            {
                frameScore[i-1] = frameScore[i-2] + 10 + scores[i][1] + scores[i][2];
                //printf("%d frameScore: %d\n", i-1, frameScore[i-1]);
                setFrameScore(i-1, frameScore[i-1]);
                printBoard();
                
            }        
            if( (scores[i][1] + scores[i][2]) < 10)
            {
                frameScore[i] = frameScore[i-1] + scores[i][1] + scores[i][2];
                //printf("%d frameScore: %d\n", i, frameScore[i]);
                setFrameScore(i, frameScore[i]);
                printBoard();
            }
        }
    }
    
    // 10 frame
    printf("10 frame first score : ");
    scanf("%d", &score10[1]);
    setScore(10, 1, score10[1]);
    printBoard();
 
    
    if( (scores[9][1] != 10) && (scores[9][1] + scores[9][2] == 10) )
    {
        frameScore[9] = frameScore[8] + 10 + score10[1];
        //printf("%d frameScore : %d\n", 9, frameScore[9]);
        setFrameScore(9, frameScore[9]);
        printBoard();
    }
    else if( (scores[8][1] == 10) && (scores[9][1] == 10) )
    {
        frameScore[8] = frameScore[7] + 20 + score10[1];
        //printf("%d frameScore : %d\n", 8, frameScore[8]);
        setFrameScore(8, frameScore[8]);
        printBoard();
    }
    
    printf("10 frame second score : ");
    scanf("%d", &score10[2]);
    setScore(10, 2, score10[2]);
    printBoard();
 
    
    if(scores[9][1] == 10)
    {
        frameScore[9] = frameScore[8] + 10 + score10[1] + score10[2];
        //printf("%d frameScore : %d\n", 9, frameScore[9]);
        setFrameScore(9, frameScore[9]);
        printBoard();
    }
    
    if( (score10[1] + score10[2]) < 10)
    {
        frameScore[10] = frameScore[9] + score10[1] + score10[2];
        //printf("%d frameScore : %d\n", 9, frameScore[9]);
        setFrameScore(10, frameScore[10]);
        printBoard();
    }
    
    else //( (score10[1]==10) || ((score10[1] + score10[2]) >= 10) )
    {    
        printf("10 frame third score : ");
        scanf("%d", &score10[3]);
        setScore(10, 3, score10[3]);
        printBoard();
 
        frameScore[10] = frameScore[9] + score10[1] + score10[2] + score10[3];
        //printf("%d frameScore : %d\n", 10, frameScore[10]);
        setFrameScore(10, frameScore[10]);
        printBoard();
    }
    
    return 0;
}
 



procBoard.h

1
2
3
4
5
6
7
8
#ifndef PROCBOARD_H
#define PROCBOARD_H
 
void printBoard(void);
void setScore(int frame, int index, int score);
void setFrameScore(int frame, int frameScore);
 
#endif








Ps -> CUI = 캐릭터 유저 인터페이스