본문 바로가기

개발자 모드/C언어

C언어 물고기 물주는 게임

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

// 물고기 6마리
// 어항에 살고 있고, 사막
// 더워서 물이 증발
// 물 증발하기 전에  물을 줘서 물고리를 살려줘야함
// 물고기는 커짐, 그리고 나중에는 냠냠

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

void initData();
void printfFishes();
void decreaseWater(long elapsedTime);
int checFishAlive();

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

	initData();

	cursor = arrayFish; // curosr[0] curosr[1] curosr[2] 


	startTime = clock();  // 현재 시간을 millisecond (1000분의 1초)단위로 반환

	while (1)
	{
		printfFishes();
		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 번 물고기가 죽었습니다. 물을 주지 않습니다.", num);			
		}

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

		// 레벨업을 할 건지 확인 (레벨업은 20초마다 한번씩 수행

		if (totalElapsedTime / 20 > level - 1)
		{
			level++;   //1 -> level :2 -> level :3
			printf("*** 축 레벨업 ! 기존 레벨 %d레벨에서 %d 레벨로 업그레이드 ***\n\n", level - 1, level);

			// 최종레벨업
			if (level == 5)
			{
				printf("\n\n 축하합니다. 최고 레벨을 달성하였습니다. 게임을 종료합니다.\n");
				exit(0);
			}
		}

		// 모든 물고기가 죽었는지 확인
		if (checFishAlive() == 0)
		{
			// 물고기 모두 죽음
			printf("모든 물고기 사망 \n");
			exit(0);
		}
		else
		{
			printf("물고기가 살아있어요\n");
		}

		prevElapsedTime = totalElapsedTime;

	}

	return 0;
}


void initData()
{

	level = 1; // 게임 레벨 (1 ~5)
	for (int i = 0; i < 6; i++)
	{
		arrayFish[i] = 100;  // 어항의 물 높이 (0 ~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]);

	}

	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 checFishAlive()
{
	for (int i = 0; i < 6; i++)
	{
		if (arrayFish[i] > 0)
			return 1;// 참 True
	}
	return 0;
}

 

 

728x90