[C] 포인터 - 어항 속 물고기 게임

2022. 4. 25. 14:20·언어/C
728x90
#include <stdio.h>
#include <time.h>

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

void initData();
void printFish();
void decreaseWater(long elapseTime);
int checkWater();

int main(void)
{
	long startTime = 0;
	long totalTime = 0;
	long prevTime = 0;

	int num;

	initData();

	cursor = fishbowl;
	startTime = clock();

	while (1)
	{
		printFish();
		printf("몇 번 어항에 물을 주시겠습니까? : ");
		scanf_s("%d", &num);
		printf("\n");

		if (num < 1 || num>6)
		{
			printf("잘못된 입력입니다.\n");
			continue;
		}

		totalTime = (clock() - startTime) / CLOCKS_PER_SEC;
		printf("총 경과 시간 : %d초\n", totalTime);
		prevTime = totalTime - prevTime;
		printf("직전 물주기부터 경과 시간 : %d초\n", prevTime);
		
		decreaseWater(prevTime);

		if (cursor[num - 1] == 0)
		{
			printf("물고기가 이미 죽었습니다.\n");
			exit(0);
		}
		else if (cursor[num - 1] < 100)
		{
			printf("%d번 어항에 물을 줍니다.\n", num);
			cursor[num - 1] += 1;
		}

		if ((totalTime / 20) > level - 1)
		{
			printf("\n\n***%d레벨에서 %d레벨로 업그레이드 됐습니다.***\n\n", level, level+1);
			level++;
			if (level == 5)
			{
				printf("\n\n최종 레벨입니다. 게임을 종료합니다.\n\n");
				exit(0);
			}
		}

		if (checkWater() == 0)
		{
			printf("모든 물고기가 죽었습니다. 게임을 종료합니다.\n\n");
			exit(0);
		} 
		else
		{
			printf("물고기가 살아있습니다.\n\n");
		}

		prevTime = totalTime;
	}

	return 0;
}

void initData()
{
	level = 1;
	for (int i = 0; i < 6; i++)
	{
		fishbowl[i] = 100;
	}
}

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

void decreaseWater(long elapseTime)
{
	for (int i = 0; i < 6; i++)
	{
		fishbowl[i] -= (level * 3 * (int)elapseTime);
		if (fishbowl[i] < 0)
		{
			fishbowl[i] = 0;
		}
	}
}

int checkWater()
{
	for (int i = 0; i < 6; i++)
	{
		if (fishbowl[i] > 0)
		{
			return 1;
		}
		return 0;
	}
}

모두가 포기한다는 포인터를 활용하는 게임이다.

​

1. 게임 내에 시간 지정

2. 어항 속 물 데이터 함수로 불러오기

3. cursor, startTime 지정

4. 무한루프

4-1. 어항 상태 출력

4-2. 물을 줄 어항 선택 (1보다 작거나 6보다 크면X)

4-3. 시간 정리 (totalTime, prevTime)

4-4. 시간, 레벨에 따라 물 줄어들게 하기

4-5. 물이 0이면 물고기 죽이고, 100보다 적으면 물 주기

4-6. 20초마다 레벨업

4-6-1. 레벨 5면 게임 끝

4-7. 모든 어항에 물이 0이면 게임 끝, 하나라도 있으면 물고기가 살아있습니다.

4-8. 직전 시간 관리.

​

clock()을 사용하기 위해 time.h를 선언해줬다. 직접 플레이 하기에 은근 재밌고, 어렵다.

void decreaseWater(long elapseTime)
{
	for (int i = 0; i < 6; i++)
	{
		fishbowl[i] -= (level * 3 * (int)elapseTime); // 여기서 숫자 3을 2, 1로 바꾸면 난이도가 확 내려간다.
		if (fishbowl[i] < 0)
		{
			fishbowl[i] = 0;
		}
	}
}
728x90

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

[C] 캐스트 연산자  (0) 2022.04.25
[C] 구조체 - 고양이 뽑기 게임  (0) 2022.04.25
[C] define 매크로 함수 사용하기  (0) 2022.04.24
[C] 파일 입출력 - 비밀 일기 프로젝트  (0) 2022.04.24
[C] 배열 - 발모제 찾기 게임  (0) 2022.04.24
'언어/C' 카테고리의 다른 글
  • [C] 캐스트 연산자
  • [C] 구조체 - 고양이 뽑기 게임
  • [C] define 매크로 함수 사용하기
  • [C] 파일 입출력 - 비밀 일기 프로젝트
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (232)
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (145)
        • Unity (40)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩
    tcp
    라즈베리파이
    EntityFramework
    C언어
    유니티
    java
    C#
    백준
    Entityfamework
    C
    coding
    네트워크
    자바
    HTML
    Python
    디자인패턴
    게임서버
    unity
    EFCore
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[C] 포인터 - 어항 속 물고기 게임
상단으로

티스토리툴바