본문 바로가기

C언어/프로젝트
C 언어 프로젝트 6 - 물고기 키우기

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

// 사막에 있는 어항에 살고 있는 물고기가 6마리가 있다.
// 사막이 너무 덥고 건조해서 물이 아주 빨리 증발한다.
// 물이 증발하기 전에 부지런히 어항에 물을 넣어 물고기를 살려주자.
// 물고기는 시간이 지날수록 점점 커져서 ... 나중에는 냠냠..

int level;
int arrayFish[6];
int *cursor;

void initData();
void printFishes();
void decreaseWater(long elapsedTime);


int main(void)
{
long startTime = 0; // 게임 시작 시작
long totalElapsedTime = 0; // 총 경과 시간
long prevElapsedTime = 0; // 직전 경과 시간 (최근에 물을 준 시간 간격)

int num; // 몇 번 어항에 물을 줄 것인지, 사용자 입력
initData();

cursor = arrayFish; // cursor[0]... cursor[1]...

startTime = clock(); // 현재 시간을  millisecond (1000분의 1초) 단위로 반환
while (1)
{
printFishes();
printf("몇 번 어항에 물을 주시겠어요? ");
scanf_s("%d", &num);

// 입력값 체크
if (num < 1 || num >6)
{
printf("\n입력값이 잘못되었습니다.\n");
continue;
}

// 총 경과 시간
totalElapsedTime = (clock() - startTime) / CLOCKS_PER_SEC;
printf("총 경과 시간 : %ld 초\n", totalElapsedTime);

// 직전 물 준 시간 (마지막으로 물 준 시간) 이후로 흐른 시간
prevElapsedTime = totalElapsedTime - prevElapsedTime;
printf("최근 경과 시간 : %ld 초\n", prevElapsedTime);


//어항의 물을 감소(증발)
decreaseWater(prevElapsedTime);

//사용자가 입력한 어항에 물을 준다.
// 1. 어항의 물이 0이면? 물을 주지 않는다... 이미 고기가 ㅠㅠ
if (cursor[num - 1] <= 0)
{
printf("%d번 물고기는 이미 죽었습니다.. 물을 주지 못합니다.\n", num);
}

//2. 어항의 물이 0이 아닌 경우? 물을 준다. 100을 넘지 않는지는 체크!!
else if (cursor[num - 1] + 1 <= 100)
{
//물을 준다.
printf("%d번 어항에 물을 줍니다.\n\n", num);
cursor[num - 1] += 1;
}

// 레벨업을 할 건지 확인 (레벨업은 20초마다 한 번씩 수행)
if (totalElapsedTime / 20 > level - 1)
{
level++;
printf("*** 축 레벨 업! 기존 %d 레벨에서 %d 레벨로 업그레이드 ***\n\n", 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초: prevElapsedTime) -> 25초 (10초...?)

}
return 0;
}


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

}

void printFishes()
{
printf("%3d번  %3d번  %3d번  %3d번  %3d번  %3d번\n", 1, 2, 3, 4, 5, 6);
for (int i = 0; i < 6; i++)
{
printf("  %3d  ", arrayFish[i]);
}
printf("\n\n");
}

void decreaseWater(long elapsedTime)
{
for (int i = 0; i<6; i++)
{
arrayFish[i] -= (level * 3 * (int)elapsedTime);  // 3: 난이도 조절을 위한 값
if (arrayFish[i] < 0)
{
arrayFish[i] = 0;
}
}
}

int checkFishAlive()
{
for (int i = 0; i < 6; i++)
{
if (arrayFish[i] > 0)
return 1; // 참True
}
return 0;
}

 

**유튜브 나도코딩 참고