유튜브 나도코딩 c언어 기초 강의 내용이 포함되었습니다.
#include <stdio.h>
#include <time.h>
// 5마리의 고양이가 있다
// 아무키나 눌러서 랜덤으로 고양이를 뽑되
// 5마리 모두 다 수집을 해서 열심히 키우면 되는 게임 !
// 중복발생가능 !!
// 고양이
// 이름 나이 성격 키우기난이도(레벨)
typedef struct {
char* name;
int age;
char* character;
int level;
}cat;
// 현재까지 보유한 고양이
int collection[5] = { 0, };
// 전체 고양이 리스트
cat cats[5];
void initcats();
void printcat(int selected);
int main(void)
{
srand(time(NULL));
initcats();
while (1)
{
printf("두근두근~! 어느 고양이의 집사가 될까요?\n아무키나 눌러서 확인하세요.");
getchar();
int selected = rand() % 5; ///0-4 사이의 숫자 반환
printcat(selected); // 뽑은 고양이 정보 출력
collection[selected] = 1;
int collectAll = checkCollection();
if (collectAll == 1)
{
break;
}
}
return 0;
}
void initcats()
{
cats[0].name = "깜냥이";
cats[0].age = 5;
cats[0].character = "온순";
cats[0].level = 1;
cats[1].name = "귀요미";
cats[1].age = 3;
cats[1].character = "날카로움";
cats[1].level = 2;
cats[2].name = "수줍이";
cats[2].age = 7;
cats[2].character = "늘 잠만 잠";
cats[2].level = 3;
cats[3].name = "까꿍이";
cats[3].age = 4;
cats[3].character = "시끄러움";
cats[3].level = 4;
cats[4].name = "돼냥이";
cats[4].age = 1;
cats[4].character = "배고픔";
cats[4].level = 5;
}
void printcat(int selected)
{
printf("\n\n ==== 이 고양이의 집사가 되었어요 ! ====\n\n");
printf(" 이름 : %s\n", cats[selected].name);
printf(" 나이 : %d\n", cats[selected].age);
printf(" 특징 : %s\n", cats[selected].character);
printf(" 레벨 : ");
for (int i = 0; i < cats[selected].level; i++)
{
printf("%s", "★");
}
printf("\n\n");
}
int checkCollection()
{
// 현재 보유한 고양이 목록도 출력. 다 모았는 지 여부를 반환
int collectAll = 1;
printf("\n\n === 보유한 고양이 목록이에요. === \n\n");
for (int i = 0; i < 5; i++)
{
if (collection[i] == 0) // 고양이 수집 x
{
printf("%10s", "(빈 박스)");
collectAll = 0;
}
else // 고양이 수집 0
{
printf("%10s", cats[i].name);
}
}
printf("\n===========================================\n\n");
if (collectAll)
{
printf("\n\n 축하합니다 ! 모든 고양이를 다 모았어요. 잘 키워\n\n");
}
return collectAll;
}
고양이 키우기 게임이다.
구조체를 사용해서 고양이를 선언하고 랜덤으로 고양이를 뽑아서 5마리를 모두 다 모으는 게임.
고양이를 랜덤으로 뽑을거니까 헤더파일에 #include <time.h> 추가, 그리고 srand(time(NULL)); 선언
구조체를 활용해서 고양이 5마리를 선언해줄건데, typedef를 이용해서 struct cat 을 cat으로 줄여주고
멤버변수는 이름, 나이, 특징, 레벨을 선언해줬다. 이름과 특징은 문자열이 들어갈 것이기 때문에 포인터변수로 넣어줬고,
전체 고양이 리스트를 전역변수로 구조체 배열을 사용했다. 또 현재까지 보유한 고양이를 알기 위해 collection[5] 배열 변수도 전역변수로 선언해주었다.
전역변수 int collection[5]은 모두 0으로 초기화 해뒀는데, 이 변수는 나중에 고양이 5마리를 다 뽑으면 while문을 탈출할 때 쓰일 것이다.
initcats는 구조체 배열을 활용해서 고양이 다섯마리를 선언해주었고
printcat은 랜덤으로 뽑은 고양이의 정보를 출력하게 했는데, 레벨은 숫자만큼 ★를 출력하게 했다.
구조체를 활용해 고양이들을 선언 후 while을 이용해 고양이 5마리를 모두 뽑을 때까지 반복하게 했다.
getchar(); 를 써서 엔터키를 눌러야 다음 코드를 실행하도록 했고, 숫자를 랜덤으로 뽑아서 그 뽑은 숫자의 고양이의 정보를 출력하고 보유한 collection[뽑은 숫자]를 1로 만들어 줄 것이다.
변수 collectAll은 배열 collection[5]와 함께 고양이 5마리를 다 찾았는지를 확인하기위해 선언했다.
함수 checkCollection 또한 함께 쓰일건데,
checkCollection은 변수 collectAll을 1로 초기화 해주고, 아까 선언했던 배열 collection[5] 에서 collection[i] == 0 이라면
아직 뽑히지 않은 고양이니까 그 때는 (빈 박스)로 출력하는 것과 변수 collection을 0으로 초기화 시켜준다.
그리고 collection[i]가 0이 아니라면 (1이라면) 고양이는 수집 된 것이고 collectAll은 여전히 1, 고양이 이름을 출력하기만 할 것이다.
for문을 이용해서 i를 0~4까지 반복하면, 수집되지 않은 고양이가 한 마리라도 있을 때 (collection[i] ==0인 것이 있을 때) collectAll은 0이 되고 checkCollection의 return값(collectAll)이 0이 되기 때문에 main 함수 내 while문은 멈추지않고 다시 반복할 것이다.
고양이를 다 모았다면 collection[i] ==0 이 없기 때문에 collectAll 또한 0이 되지 않고 return 값이 1이 되어서 main함수 내의 while문을 탈출하게 될 것이다.
'c언어 기초' 카테고리의 다른 글
c언어 동적 메모리 할당하는 이유 (0) | 2022.06.07 |
---|---|
c언어 구조체 struct 구조체 포인터 struct pointer - 나도코딩 (0) | 2022.06.03 |
c언어 다차원배열 multidimensional array 프로젝트 카드뒤집기게임 - 나도코딩 (0) | 2022.06.02 |
c언어 다차원배열 multidimensional array - 나도코딩 (0) | 2022.05.31 |
c언어 포인터, pointer 프로젝트, 물고기 키우기 - 나도코딩 (0) | 2022.05.31 |