C

C언어(9)

사회적가치누리 2024. 11. 19. 19:34

프로젝트

 

물고기 키우기 게임을 c언어로 작성해보겠습니다.

시간이 지날수록 어항에 물이 점점 줄어들고 계속해서 클릭을 해서 물을 채워넣어야함.

레벨이 올라갈수록 물이 줄어드는 속도가 빨라지고, 레벨 5가 되면 클리어, 만약 모든 물고기가 죽으면 게임오버.

 

 

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

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

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


int main(void)
{
	long startTime = 0; //  게임 시작 시간
	long totalElapsedTime = 0; // 총 경과 시간
	long prevelapsedTime = 0; // 직전 경과 시간

	int num; // 몇 번 어항에 물을 줄 것인지,
	initData();

	cursor = arrayFish;

	startTime = clock(); // 현재 시간을 millisecound (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);

		// 사용자가 입력한 어항에 물을 준다.
		// 어항의 물이 0이면 물을 줄 수 없음

		if (cursor[num - 1] <= 0)
		{
			printf("%d 번 물고기는 이미 죽었습니다.. 물을 주지 않습니다. \n", num);
		}
		// 어항의 물이 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축하합니다. 최고 레벨을 달성했습니다. 게임을 종료합니다.\n\n");
				exit(0);
			}
		}

		// 모든 물고기가 죽었는지 확인
		if (checkFisshAlive() == 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("  %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 checkFisshAlive()
{
	for (int i = 0; i < 6; i++)
	{
		if (arrayFish[i] > 0)
			return 1;
	}
	return 0;
}

 

 

'C' 카테고리의 다른 글

C언어(11)  (0) 2024.11.21
C언어(10)  (0) 2024.11.20
C언어(8) 기초8  (0) 2024.11.18
C언어(7) 기초7  (0) 2024.11.16
C언어(6) 기초6  (0) 2024.11.13