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 |