-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpointer_project.c
147 lines (124 loc) · 3.7 KB
/
pointer_project.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <stdio.h>
#include <time.h>
// 물고기가 6마리가 있어요
// 이들은 어항에 살고 있는데, 사막이에요
// 사막이 너무 더워서, 너무 건조해서 물이 아주 빨리 증발을 해요
// 물이 다 증발하기 전에 부지런히 어항에 물을 줘서 물고기를 살려주세요~
// 물고기는 시간이 지날수록 점점 커져서.. 나중에는..냠냠...
int level;
int arrayFish[6];
int* cursor;
void initData();
void printfFishes();
void decreaseWater(long elapsedTime);
int main_p(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)
{
printfFishes();
printf("몇 번 어항에 물을 주시겠어요?");
scanf_s("%d", &num);
// 입력값 체크
if (num < 1 || num > 6)
{
printf("\n입력값이 잘못되었습니다\n");
continue;
}
// 총 경과 시간
totalElapsedTime = (clock() - startTime) / CLOCKS_PER_SEC;
printf("총 경과 시간: %1d 초\n", totalElapsedTime);
// 직전 물 준 시간 (마지막으로 물 준 시간) 이후로 흐른 시간
prevElapsedTime = totalElapsedTime - prevElapsedTime;
printf("최근 경과 시간 : %1d 초 \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; // cursor[num - 1] = cursor[num - 1] + 1
}
// 레벨업을 할 건지 확인 (레벨업은 20초마다 한번씩 수행)
if (totalElapsedTime / 20 > level - 1)
{
level++; // level : 1 -> level : 2 -> level : 3 ..
printf(" *** 축 레벨업 ! 기존 %d 레벨에서 %d 레벨로 업그레이드 ***\n\n", level - 1, level);
// 최종 레벨 : 5
if (level == 5)
{
printf("\n\n축하합니다. 최고 레벨을 달성하였습니다. 게임을 종료합니다.\n\n");
exit(0);
}
}
// 모든 물고기가 죽었는지 확인
if (checkFishAlive() == 0)
{
// 물고기 모두 ㅠㅠ
printf("모든 물고기가...ㅠㅠ 흑흑... \n");
exit(0);
}
else
{
// 최소 한마리 이상의 물고기는 살아 있음
printf("물고기가 아직 살아 있어요!\n");
}
prevElapsedTime = totalElapsedTime;
// prevElapsedTime은 이미 이전에 썼기 때문에 필요없어짐 -> 다시 반복할 때 prevElapsedTime 을 계산하기 위해 전체 시간인 totalElapasedTime 을 임시로 넣고
// 다시 반복할 때 새로 경과된 시간인 totalElapasedTime 에서 prevElapsedTime 을 빼서 prevElapsedTime 을 구함
// 10 초 -> 15 초 ( 5초 : prevElapsedTime -> 15초 ) -> 25초 ( 10초 ...?)
}
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); // %3d -> 3자리의 정수 // 6칸
for (int i = 0; i < 6; i++)
{
printf(" %3d ", arrayFish[i]); // 6칸
}
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;
}