ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [게임알고리즘] 5-2강 문자열
    [DSU] 게임알고리즘 2026. 4. 3. 23:57
    728x90

    String을 구현하기에 앞서, operator에 대해서 알아보기

     

    정수형 처럼 사용할 수 있는 Number 구조체 구현

    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
    #include <stdio.h>
     
    struct Number
    {
        int number;
        
        Number()
        {
            number = 0;
        }
        
        Number& operator = (int n)
        {
            number = n;
            return *this;
        }
        
        Number& operator += (int n)
        {
            number += n;
            return *this;
        }
        
        Number& operator ++ (int n)
        {
            number++;
            return *this;
        }
        
        void print()
        {
            printf("%d\n", number);
        }
    };
     
    int main() {
        
        Number n;
        printf("sizeof(Number) = %d\n"sizeof(Number));
        n.print();
        
        n = 10;
        n.print();
        
        n += 5;
        n.print();
        
        n++;
        n.print();
     
        return 0;
    }
    cs

     

     

    값이 한번에 대입 되는 것이 아니라, 순차적으로 증감되게 구현.

    게임에서 점수 숫자나 게이지 바를 표시할때 활용하면 편리함.

    예제는 테스트 상 0.1초씩 흐르며, 1초가 흘렀을때 최종 목표값이 대입됨.

    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
    #include <stdio.h>
     
    struct Number
    {
        int number;
        int numberS, numberE;
        float delta, _delta;
        
        Number(float dt = 1.0f)
        {
            number = 0;
            numberS = 0; numberE = 0;
            delta = dt; _delta = dt;
        }
        
        // 렌더링시 호출
        void update(float dt)
        {
            if( delta < _delta )
            {
                delta += dt;
                if( delta >= _delta )
                {
                    delta = _delta;
                    number = numberE;
                }
            }
        }
        
        // 멤버변수 number가 아닌, 실시간으로 변하는 값을 구함
        int get()
        {
            if( delta < _delta )
            {
                float r = delta / _delta;
                return numberS * (1.0f - r) + numberE * r;
            }
            return number;
        }
        
        Number& operator = (int n)
        {   //number = n;
            numberS = get();
            numberE = n;
            delta = 0.0f;
            return *this;
        }
        
        Number& operator += (int n)
        {   //number += n;
            numberS = get();
            numberE += n;
            delta = 0.0f;
            return *this;
        }
        
        Number& operator ++ (int)
        {   //number++;
            numberS = get();
            numberE++;
            delta = 0.0f;
            return *this;
        }
        
        void print()
        {
            printf("%d\n", get());
        }
    };
     
    int main() {
        
        Number n;
        printf("sizeof(Number) = %d\n"sizeof(Number));
        n.print();
        
        printf("==================================\n");
        n = 10;
        for(int i=0; i<10; i++)
        {
            n.update(0.1f);
            n.print();
        }
        
        printf("==================================\n");
        n += 5;
        for(int i=0; i<10; i++)
        {
            n.update(0.1f);
            n.print();
        }
        
        printf("==================================\n");
        n++;
        for(int i=0; i<10; i++)
        {
            n.update(0.1f);
            n.print();
        }
     
        return 0;
    }
    cs

     

    매일매일 열심히 게임개발하고 있습니다

Designed by Tistory.