C언어 공부

포인터2

Bordercolli 2023. 7. 18. 21:56
728x90

배열과 포인터

#include <stdio.h>

void changeArray(int *ptr);

int main(void)
{
    int arr2[3]={10, 20, 30};
    changeArray(arr2);  /* 배열일떄 arr2 자체는 주소를 가진다. */
    /* 앞에 별도의 &를 붙일 필요 없이 배열 자체는 주소를 바로 던지는 것이다.*/
    for(int i=0; i<3; i++)
    {
        printf("%d\n", arr2[i]);
    }

    return 0;
}

void changeArray(int *ptr)
{ //배열을 받을때는 함수 정의시 포인터로 받는 다.
    ptr[2]=50;

}

중요한 점은 배열을 선언하는 변수는 그 자체만으로 주소를 가진다!!!

int main(void)
{
    int arr2[3]={10, 20, 30};
    changeArray(&arr2[0]);  /* 배열일떄 arr2 자체는 주소를 가진다. */
    /* 앞에 별도의 &를 붙일 필요 없이 배열 자체는 주소를 바로 던지는 것이다.*/
    for(int i=0; i<3; i++)
    {
        printf("%d\n", arr2[i]);
    }

    return 0;
}
 

이렇게 한다면 우리가 예상하는 결과는 50, 20, 30일 것이다.

그러나

왜 이러는 걸까???

배열은 연속된 공간에 연속된 주소에 배열 공간을 할당해서 첫번쨰 배열항목에 해당하는 주소를 던져서 거기로부터 세번쨰 위치의 배열에 값을 바꾸는 것을 올바른 동작이라고 할 수 있다.

 

그렇다 scanf를 받을때 &num과 같이 왜 &표시를 붙였는지?이유를 알 수 있다.

 

프로젝트1(전반전)

#include <stdio.h>
#include <time.h>

/* 프로젝트 설명
물고기가 6마리가 있다. 이들은 어항에 살고 있는데 사막이다.
사막이 너무 건조해서 물이 아주 빨리 증발을 한다.
물이 다 증발하기 전에 부지런히 어항에 물을 줘서 물고기를 살려주세요~~
물고기는 시간이 지날 수록 점점 커져서 나중에는 잡아묵겟다.
*/
int level;    // 레벨을 전역 변수로 선언한다.
int arrayFish[6];   // 6개의 공간을 가진 어항배열을 만든다.
int *cursor;   /*arrayFish를 가리키면서 1번 물고기한테 물을 줄지, 2번 물고기 한테 물을 줄지 즉,
커서라는 포인터 변수가 각 물고기 어항에 찾아가서 물을 주는 동작을 하도록 한다. */
void initData();
void printfFishes();


int main(void)
{  
    long startTime=0;    // 시간은 보통 long자료형을 사용한다. 게임 시작 시간을 의미한다.
    long totalElapsedTime=0;   //총 경과 시간
    long prevElapsedTime=0;    // 직전 경과시간 (최근에 물을 준 시간 간격)

    int num;   //몇 번 어항에 물을 줄 것인지, 사용자 입력을 받는 부분
    initData(); // 데이터 초기화

    cursor=arrayFish; // arrayFish값을 커서에 집어넣는다. 이렇게 포인터 변수를 활용함으로서 우리가 배열과 똑같이 사용할 수 있다.



    // 게임이 시작되는 부분
    startTime=clock(); // 현재 시간을 milisecond 즉, 1000분의 1초로 반환 (time.h에 정의)

    while(1)
    {
        // 무한 반복을 하면서 진행한다. 물고기가 다 죽을떄 까지 게임을 실행할 것이라서 무한 반복
        printfFishes(); // 물고기들의 어항 상태를 보고해준다.
        printf("몇 번 어항에 물을 주시겠어요?"); // 사람에게 입력 받도록 한다.
        scanf_s("%d", &num);  // 사람에게 받은 입력 값을 num에 집어넣는다.

        /* 게임을 하다보면 1번 어항 3번 어항 이런 식으로 물을 줄 수 있는데, 마음이 급해지면 12이렇게 입력
        하게 된다면 어떠한 어항도 물을 받지 못하게 된다. 그래서 아래는 입력값을 체크한다.*/
        if(num<1 || num>6)   // 1~6까지의 입력값만 받도록 한다.
        {
            printf("\n입력값이 잘못되었습니다. \n");
            continue;   // 이렇게 하면 다시 위에 어항상태 보여주고 계속 진행할 것이다.
        }
        // 입력값 체크

        //총 경과시간
        totalElapsedTime=(clock()-startTime) / CLOCKS_PER_SEC; // 총 경과시간 체크 (얼마만큼 시간이 지났는가?)
        /* 이러면 게임 맨 처음 시작할떄 시간으로부터 사용자 입력을 한 번 받고 나서 총 몇 초 걸렸는
        지 알 수 있다. 하지만 해당 값은 Milisecond이니 clocks_per_sec으로 나누어 준다.
        이 변수는 1000단위로 나누어서 만약 6000mili초가 흘럿다고 한다면 1000을 나눈 6초가 흘렀다.
        라는 초 단위로 바꾸어주는 역할을 한다.*/
        printf("총 경과시간 : %ld\n", totalElapsedTime);

        /* 직전에 물을 준 시간을 체크한다.  (마지막으로 물 준 시간) 이후로 흐른 시간
        즉, 마지막으로 물을 주고 나서 얼마가 흘렀는지?
        만약 우리가 10초가 흘렀을떄 물을 한번 주었다면 ? 그리고 우리가 다시 올라와서 다시 어항에
        물을 줬을떄가 13초였다. 그러면 그 차이는 13초에서 10을 뺀 3초
        이렇게 되면 3초간의 시간이 흘럿다는 것을 보여준다.
        이걸 하는 이유는 3초 동안에 물이 얼만큼 흘럿는지를 계산하기 위해서 쓴다.
        만약 사용자 입력이 10초 동안 있었다면 10초동안 물 빠진 것을 계산해서 물 높이를 낮춰야한다.
        그런 목적으로 한다. */
       
        prevElapsedTime=totalElapsedTime-prevElapsedTime; // 총 경과 시간에서 직전 시간을 뺀다.  
        printf("최근 경과시간: %ld\n", prevElapsedTime);
    }


    return 0;
}

void initData()
{
    level=1;   // 게임레벨 {1-5}
    for(int i=0; i<6; i++)
    {
        arrayFish[i] = 100;// 어항
    }
}

void printfFishes()
{// 물이 얼만큼 남아있는지 알려줘야 어느 물고기들을 키울지를 정할 수 있으니
    printf("%3d%3d%3d%3d%3d%3d\n", 1, 2, 3, 4, 5, 6); // 순서대로 어항에 번호 매김
    for(int i=0; i<6; i++)
    {
        printf(" %4d ", arrayFish[i]); /*%4d에 앞 뒤로 두칸씩 띄운 이유는 하나의 어항당 차지하는 공간이
        %3d는 세칸의 공간을 할당받고, 거기에 숫자를 표시한다. 그래서 1이라는 숫자가 들어와도 앞에
        두 칸의 공백이 생길거고 '번'이라는 한글은 두 자를 차지한다. 뒤에 스페이스가 한 칸 있기 떄문에
         총 이러면 %3d번만 해도 6칸이 된다. 그래서 위와 맞추기 위해서 %4d도 6칸을 차지하도록 할 것인데,
         앞 뒤로 한 칸씩 띄우고 중간에 4칸의 공간을 마련해서 이렇게 처리를 하도록 한다.  */
    }
    printf("\n\n");
}



#include <stdio.h>
#include <time.h>

/* 프로젝트 설명
물고기가 6마리가 있다. 이들은 어항에 살고 있는데 사막이다.
사막이 너무 건조해서 물이 아주 빨리 증발을 한다.
물이 다 증발하기 전에 부지런히 어항에 물을 줘서 물고기를 살려주세요~~
물고기는 시간이 지날 수록 점점 커져서 나중에는 잡아묵겟다.
*/
int level;    // 레벨을 전역 변수로 선언한다.
int arrayFish[6];   // 6개의 공간을 가진 어항배열을 만든다.
int *cursor;   /*arrayFish를 가리키면서 1번 물고기한테 물을 줄지, 2번 물고기 한테 물을 줄지 즉,
커서라는 포인터 변수가 각 물고기 어항에 찾아가서 물을 주는 동작을 하도록 한다. */
void initData();
void printfFishes();
void decreaseWater(long elapsedTime);


int main(void)
{  
    long startTime=0;    // 시간은 보통 long자료형을 사용한다. 게임 시작 시간을 의미한다.
    long totalElapsedTime=0;   //총 경과 시간
    long prevElapsedTime=0;    // 직전 경과시간 (최근에 물을 준 시간 간격)

    int num;   //몇 번 어항에 물을 줄 것인지, 사용자 입력을 받는 부분
    initData(); // 데이터 초기화

    cursor=arrayFish; // arrayFish값을 커서에 집어넣는다. 이렇게 포인터 변수를 활용함으로서 우리가 배열과 똑같이 사용할 수 있다.



    // 게임이 시작되는 부분
    startTime=clock(); // 현재 시간을 milisecond 즉, 1000분의 1초로 반환 (time.h에 정의)

    while(1)
    {
        // 무한 반복을 하면서 진행한다. 물고기가 다 죽을떄 까지 게임을 실행할 것이라서 무한 반복
        printfFishes(); // 물고기들의 어항 상태를 보고해준다.
        printf("몇 번 어항에 물을 주시겠어요?"); // 사람에게 입력 받도록 한다.
        scanf_s("%d", &num);  // 사람에게 받은 입력 값을 num에 집어넣는다.

        /* 게임을 하다보면 1번 어항 3번 어항 이런 식으로 물을 줄 수 있는데, 마음이 급해지면 12이렇게 입력
        하게 된다면 어떠한 어항도 물을 받지 못하게 된다. 그래서 아래는 입력값을 체크한다.*/
        if(num<1 || num>6)   // 1~6까지의 입력값만 받도록 한다.
        {
            printf("\n입력값이 잘못되었습니다. \n");
            continue;   // 이렇게 하면 다시 위에 어항상태 보여주고 계속 진행할 것이다.
        }
        // 입력값 체크

        //총 경과시간
        totalElapsedTime=(clock()-startTime) / CLOCKS_PER_SEC; // 총 경과시간 체크 (얼마만큼 시간이 지났는가?)
        /* 이러면 게임 맨 처음 시작할떄 시간으로부터 사용자 입력을 한 번 받고 나서 총 몇 초 걸렸는
        지 알 수 있다. 하지만 해당 값은 Milisecond이니 clocks_per_sec으로 나누어 준다.
        이 변수는 1000단위로 나누어서 만약 6000mili초가 흘럿다고 한다면 1000을 나눈 6초가 흘렀다.
        라는 초 단위로 바꾸어주는 역할을 한다.*/
        printf("총 경과시간 : %ld\n", totalElapsedTime);

        /* 직전에 물을 준 시간을 체크한다.  (마지막으로 물 준 시간) 이후로 흐른 시간
        즉, 마지막으로 물을 주고 나서 얼마가 흘렀는지?
        만약 우리가 10초가 흘렀을떄 물을 한번 주었다면 ? 그리고 우리가 다시 올라와서 다시 어항에
        물을 줬을떄가 13초였다. 그러면 그 차이는 13초에서 10을 뺀 3초
        이렇게 되면 3초간의 시간이 흘럿다는 것을 보여준다.
        이걸 하는 이유는 3초 동안에 물이 얼만큼 흘럿는지를 계산하기 위해서 쓴다.
        만약 사용자 입력이 10초 동안 있었다면 10초동안 물 빠진 것을 계산해서 물 높이를 낮춰야한다.
        그런 목적으로 한다. */
       
        prevElapsedTime=totalElapsedTime-prevElapsedTime; // 총 경과 시간에서 직전 시간을 뺀다.  
        printf("최근 경과시간: %ld\n", prevElapsedTime);

        //위는 증가되고 있는 과정이고, 어항의 물을 감소시켜본다.
        decreaseWater(prevElapsedTime);

        /*사용자가 입력한 어항에 물을 준다.
        1. 어항에 물이 0이면? 만약 물을 줄려는 어항의 물고기가 이미 죽은상태라면 물을 줄 필요가 없다.
        */
       if(cursor[num-1]<=0)
       {
        printf("%d 번 물고기는 이미 사망했습니다. 물을 주지 않습니다.");
       }
       /*2. 어항의 물이 0이 아닌 경우? 물을 준다! 이떄 100을 넘지 않는지 체크한다.
       현재 어항의 물 +1<=100
       을 했을때, 100보다 작거나 같으면 물을 주고 아니면 물 안준다.*/
       else if (cursor[num-1]+1<=100)
       {    
            // 물을 준다.
            printf("%d번 어항에 물을 준다\n\n", num);
            cursor[num-1]+=1;  
       }
       // 여기까지 물을 주는 내용
       // 마지막으로 레벨업을 어떻게 할 것인가? (레벨업은 20초마다 한 번씩 수행)
       // 20초를 물고기를 죽이지 않고 살리고 있으면 레벨을 올려주며 물을 빨리 빠지게 한다.
        if(totalElapsedTime/20 > level-1)
        {
            /*만약 total 시간이 15초가 흘렀으면, 15초가 흘렀을때 15/20은 몫이 0이라서
            0으로 된다. level1일때 0은 0보다 크지 않기 때문에 false가 되고 아무런 동작을 하지 않게 된다.
            만약에 레벨1로 선언햇는데 수행 시간이 25라면 몫이 25/20은 1이라서 레벨 업이 된다.*/
            level++; // 처음 레벨이 1이었을떄는 level이 2가 된다.
            /*45초가 되면 45/20=2이므로 level2일때 2-1로 왼쪽이 더 커지므로 levelup을 할 수 있게 된다.*/
            printf(" *** 축 레벨업 ! 기존 %d레벨에서 %d레벨로 업그레이드를 하였습니다. ", level-1, level);
       
        //최종레벨은 5
        if(level==5)
        {
            printf("\n\n축하합니다. 최고 레벨을 달성하여 게임을 종료합니다.");
            exit(0); // 모든 동작을 끝내는 함수

        }

       

    }


    return 0;
}

void initData()
{
    level=1;   // 게임레벨 {1-5}
    for(int i=0; i<6; i++)
    {
        arrayFish[i] = 100;// 어항
    }
}

void printfFishes()
{// 물이 얼만큼 남아있는지 알려줘야 어느 물고기들을 키울지를 정할 수 있으니
    printf("%3d%3d%3d%3d%3d%3d\n", 1, 2, 3, 4, 5, 6); // 순서대로 어항에 번호 매김
    for(int i=0; i<6; i++)
    {
        printf(" %4d ", arrayFish[i]); /*%4d에 앞 뒤로 두칸씩 띄운 이유는 하나의 어항당 차지하는 공간이
        %3d는 세칸의 공간을 할당받고, 거기에 숫자를 표시한다. 그래서 1이라는 숫자가 들어와도 앞에
        두 칸의 공백이 생길거고 '번'이라는 한글은 두 자를 차지한다. 뒤에 스페이스가 한 칸 있기 떄문에
         총 이러면 %3d번만 해도 6칸이 된다. 그래서 위와 맞추기 위해서 %4d도 6칸을 차지하도록 할 것인데,
         앞 뒤로 한 칸씩 띄우고 중간에 4칸의 공간을 마련해서 이렇게 처리를 하도록 한다.  */
    }
    printf("\n\n");
}


void decreaseWater(long elapsedTime)
{  
    for(int i=0; i<6; i++)
    {
        arrayFish[i] -= (level * 3 * (int)elapsedTime); /* arrayfish에서 level만큼의 값을 뺼 건데, level이 1이라면 1씩 빠지고
level이 5라면 그만큼 게임이 어려워져야하니까 더 많이 빠지도록 한다.
하지만 1씩 빠지는건 너무 느려서 임의로 3정도를 곱하면서 시작한다.
이렇게하면 사용자 입력까지 10초가 지낫는데 그러면 30씩 감소한다.
즉, 3은 난이도 조절을 위한 값이다. */
        if (arrayFish[i]<0)
        {
            arrayFish[i]=0;
        }
        /*어항이 물이 0보다 작아질 수 없으니 */
    }

}

프로젝트 후반전 ↑

#include <stdio.h>
#include <time.h>

/* 프로젝트 설명
물고기가 6마리가 있다. 이들은 어항에 살고 있는데 사막이다.
사막이 너무 건조해서 물이 아주 빨리 증발을 한다.
물이 다 증발하기 전에 부지런히 어항에 물을 줘서 물고기를 살려주세요~~
물고기는 시간이 지날 수록 점점 커져서 나중에는 잡아묵겟다.
*/
int level;    // 레벨을 전역 변수로 선언한다.
int arrayFish[6];   // 6개의 공간을 가진 어항배열을 만든다.
int *cursor;   /*arrayFish를 가리키면서 1번 물고기한테 물을 줄지, 2번 물고기 한테 물을 줄지 즉,
커서라는 포인터 변수가 각 물고기 어항에 찾아가서 물을 주는 동작을 하도록 한다. */
void initData();
void printfFishes();
void decreaseWater(long elapsedTime);


int main(void)
{  
    long startTime=0;    // 시간은 보통 long자료형을 사용한다. 게임 시작 시간을 의미한다.
    long totalElapsedTime=0;   //총 경과 시간
    long prevElapsedTime=0;    // 직전 경과시간 (최근에 물을 준 시간 간격)

    int num;   //몇 번 어항에 물을 줄 것인지, 사용자 입력을 받는 부분
    initData(); // 데이터 초기화

    cursor=arrayFish; // arrayFish값을 커서에 집어넣는다. 이렇게 포인터 변수를 활용함으로서 우리가 배열과 똑같이 사용할 수 있다.



    // 게임이 시작되는 부분
    startTime=clock(); // 현재 시간을 milisecond 즉, 1000분의 1초로 반환 (time.h에 정의)

    while(1)
    {
        // 무한 반복을 하면서 진행한다. 물고기가 다 죽을떄 까지 게임을 실행할 것이라서 무한 반복
        printfFishes(); // 물고기들의 어항 상태를 보고해준다.
        printf("몇 번 어항에 물을 주시겠어요?"); // 사람에게 입력 받도록 한다.
        scanf_s("%d", &num);  // 사람에게 받은 입력 값을 num에 집어넣는다.

        /* 게임을 하다보면 1번 어항 3번 어항 이런 식으로 물을 줄 수 있는데, 마음이 급해지면 12이렇게 입력
        하게 된다면 어떠한 어항도 물을 받지 못하게 된다. 그래서 아래는 입력값을 체크한다.*/
        if(num<1 || num>6)   // 1~6까지의 입력값만 받도록 한다.
        {
            printf("\n입력값이 잘못되었습니다. \n");
            continue;   // 이렇게 하면 다시 위에 어항상태 보여주고 계속 진행할 것이다.
        }
        // 입력값 체크

        //총 경과시간
        totalElapsedTime=(clock()-startTime) / CLOCKS_PER_SEC; // 총 경과시간 체크 (얼마만큼 시간이 지났는가?)
        /* 이러면 게임 맨 처음 시작할떄 시간으로부터 사용자 입력을 한 번 받고 나서 총 몇 초 걸렸는
        지 알 수 있다. 하지만 해당 값은 Milisecond이니 clocks_per_sec으로 나누어 준다.
        이 변수는 1000단위로 나누어서 만약 6000mili초가 흘럿다고 한다면 1000을 나눈 6초가 흘렀다.
        라는 초 단위로 바꾸어주는 역할을 한다.*/
        printf("총 경과시간 : %ld\n", totalElapsedTime);

        /* 직전에 물을 준 시간을 체크한다.  (마지막으로 물 준 시간) 이후로 흐른 시간
        즉, 마지막으로 물을 주고 나서 얼마가 흘렀는지?
        만약 우리가 10초가 흘렀을떄 물을 한번 주었다면 ? 그리고 우리가 다시 올라와서 다시 어항에
        물을 줬을떄가 13초였다. 그러면 그 차이는 13초에서 10을 뺀 3초
        이렇게 되면 3초간의 시간이 흘럿다는 것을 보여준다.
        이걸 하는 이유는 3초 동안에 물이 얼만큼 흘럿는지를 계산하기 위해서 쓴다.
        만약 사용자 입력이 10초 동안 있었다면 10초동안 물 빠진 것을 계산해서 물 높이를 낮춰야한다.
        그런 목적으로 한다. */
       
        prevElapsedTime=totalElapsedTime-prevElapsedTime; // 총 경과 시간에서 직전 시간을 뺀다.  
        printf("최근 경과시간: %ld\n", prevElapsedTime);

        //위는 증가되고 있는 과정이고, 어항의 물을 감소시켜본다.
        decreaseWater(prevElapsedTime);

        /*사용자가 입력한 어항에 물을 준다.
        1. 어항에 물이 0이면? 만약 물을 줄려는 어항의 물고기가 이미 죽은상태라면 물을 줄 필요가 없다.
        */
       if(cursor[num-1]<=0)
       {
        printf("%d 번 물고기는 이미 사망했습니다. 물을 주지 않습니다.");
       }
       /*2. 어항의 물이 0이 아닌 경우? 물을 준다! 이떄 100을 넘지 않는지 체크한다.
       현재 어항의 물 +1<=100
       을 했을때, 100보다 작거나 같으면 물을 주고 아니면 물 안준다.*/
       else if (cursor[num-1]+1<=100)
       {    
            // 물을 준다.
            printf("%d번 어항에 물을 준다\n\n", num);
            cursor[num-1]+=1;  
       }
       // 여기까지 물을 주는 내용
       // 마지막으로 레벨업을 어떻게 할 것인가? (레벨업은 20초마다 한 번씩 수행)
       // 20초를 물고기를 죽이지 않고 살리고 있으면 레벨을 올려주며 물을 빨리 빠지게 한다.
        if(totalElapsedTime/20 > level-1)
        {
            /*만약 total 시간이 15초가 흘렀으면, 15초가 흘렀을때 15/20은 몫이 0이라서
            0으로 된다. level1일때 0은 0보다 크지 않기 때문에 false가 되고 아무런 동작을 하지 않게 된다.
            만약에 레벨1로 선언햇는데 수행 시간이 25라면 몫이 25/20은 1이라서 레벨 업이 된다.*/
            level++; // 처음 레벨이 1이었을떄는 level이 2가 된다.
            /*45초가 되면 45/20=2이므로 level2일때 2-1로 왼쪽이 더 커지므로 levelup을 할 수 있게 된다.*/
            printf(" *** 축 레벨업 ! 기존 %d레벨에서 %d레벨로 업그레이드를 하였습니다. ", level-1, level);
       
        //최종레벨은 5
        if(level==5)
        {
            printf("\n\n축하합니다. 최고 레벨을 달성하여 게임을 종료합니다.");
            exit(0); // 모든 동작을 끝내는 함수
        }
       

        //모든 물고기가 죽었는지를 확인한다. 모든 물고기가 죽었다면 게임을 계속 진행할 필요가 없으니...
        if (checkFishAlive()==0)
        {
            //살아있는 물고기가 없다면
            printf("모든 물고기가...흑흑 ㅜㅜ...\n");
            exit(0); // 물고기가 다 죽었으니 게임을 끝낸다.
        }
        else
        {
            // 최소 한 마리의 물고기는 살아있음
            printf("물고기가 아직 살아있어요~\n");
        }
        prevElapsedTime=totalElapsedTime;
        /*최초의 물을 줄때가 10초가 지났고, 그 다음 물을 줄떄가 15초가 지낫다.그러면
        5초라는 gap은 prevElapsedtime에 집어 넣는다.
        그 다음 25초에 물을 줄텐데, 이떄는 10초를 계산한다. 그런데 이 10초를 계산하기 위해서는
        25에서 15를 뺴야하는데, 이 15가 저장될 곳이 없다. */


    }


    return 0;
}}

void initData()1

{
    level=1;   // 게임레벨 {1-5}
    for(int i=0; i<6; i++)
    {
        arrayFish[i] = 100;// 어항
    }
}

void printfFishes()
{// 물이 얼만큼 남아있는지 알려줘야 어느 물고기들을 키울지를 정할 수 있으니
    printf("%3d%3d%3d%3d%3d%3d\n", 1, 2, 3, 4, 5, 6); // 순서대로 어항에 번호 매김
    for(int i=0; i<6; i++)
    {
        printf(" %4d ", arrayFish[i]); /*%4d에 앞 뒤로 두칸씩 띄운 이유는 하나의 어항당 차지하는 공간이
        %3d는 세칸의 공간을 할당받고, 거기에 숫자를 표시한다. 그래서 1이라는 숫자가 들어와도 앞에
        두 칸의 공백이 생길거고 '번'이라는 한글은 두 자를 차지한다. 뒤에 스페이스가 한 칸 있기 떄문에
         총 이러면 %3d번만 해도 6칸이 된다. 그래서 위와 맞추기 위해서 %4d도 6칸을 차지하도록 할 것인데,
         앞 뒤로 한 칸씩 띄우고 중간에 4칸의 공간을 마련해서 이렇게 처리를 하도록 한다.  */
    }
    printf("\n\n");
}


void decreaseWater(long elapsedTime)
{  
    for(int i=0; i<6; i++)
    {
        arrayFish[i] -= (level * 3 * (int)elapsedTime); /* arrayfish에서 level만큼의 값을 뺼 건데, level이 1이라면 1씩 빠지고
level이 5라면 그만큼 게임이 어려워져야하니까 더 많이 빠지도록 한다.
하지만 1씩 빠지는건 너무 느려서 임의로 3정도를 곱하면서 시작한다.
이렇게하면 사용자 입력까지 10초가 지낫는데 그러면 30씩 감소한다.
즉, 3은 난이도 조절을 위한 값이다. */
        if (arrayFish[i]<0)
        {
            arrayFish[i]=0;
        }
        /*어항이 물이 0보다 작아질 수 없으니 */
    }

}

int checkFishAlive()
{
    // 어항의 물이 0보다 큰 게 있는지 확인
    for(int i =0; i<6; i++)
    {
        if(arrayFish[i]>0)
        {
            return 1; // true, 아직 어항에 물이 있으니 물고기가 살아있음을 알림
            //0이 된다면 if문에 이 부분을 만나지 못하고 for문이 끝난다.
        }
    }
    return 0;

}

최종 코드

'C언어 공부' 카테고리의 다른 글

구조체  (0) 2023.07.24
다차원배열  (0) 2023.07.24
다차원 배열  (0) 2023.07.21
C언어 포인터 다시 공부  (0) 2023.07.17
VSCode에서 c언어 시작하기1  (0) 2023.07.17