게임 인벤토리를 만든다고 생각해볼까요?
위 사진처럼 여러개의 칸이 있고, 아이템이 놓여있는 상황을
어떻게 하면 구현할 수 있을까요?
변수를 인벤토리 갯수만큼 만드는 것입니다.
값을 저장하려면 변수가 필요하니까요!
![]() |
![]() |
인벤토리에 5개 칸이 있고, 검(1), 방패 (2), 아이템 없음(3) 으로 가정했습니다.
이렇게 인벤토리를 만들 수 있지만, 단점이 존재합니다.
아이템 종류가 늘어나거나, 인벤토리 칸이 늘어날수록 코드길이도 늘어납니다.
아래처럼 칸이 많으면 코드가 엄청 길어집니다.
![]() |
![]() ![]() |
그래서 등장한 문법이 있습니다.
변수들을 한 곳에 모으겠다! 라는 컨셉을 가진, 배열입니다.
배열이 무엇인지 이해하기 위해 한가지 이야기를 들려드리겠습니다.
두 상황을 비교해보고, 어떤게 좀 더 편할지 골라주세요!
![]() |
![]() |
운동장에 철수, 영희, 기완이 멀리 떨어져있습니다. | 운동장에 철수, 영희, 기완이 붙어있습니다. |
선생님이 학생들에게 "교실로 와!" 라고 말하려는데, 목이 쉬어서 소리칠 순 없습니다.
다가가서 말해야 합니다. 좌측 상황이 편할까요? 우측 상황이 편할까요?
학생들이 붙어있는 우측 상황이 편할 것입니다.
이처럼 배열도 같은 개념입니다. 떨어져있는 각각의 변수들을 한곳에 모아놓았습니다.
왜 모았을까요?
편리한 점이 있기 때문입니다.
예를 들어 변수 3개를 선언하고, 입력받아야 하는 상황을 가정해봅시다.
![]() |
![]() |
![]() |
평소 우리가 하던 방식입니다. | 배열로 변수 3개를 묶었습니다. | scanf 를 한개밖에 안썼습니다. |
상황을 잘 보면, 두번째 사진에서 세번쩨 사진으로 넘어가면서 scanf 갯수가 한개로 줄었습니다.
어떻게 된걸까요?
![]() 보시면 [ ] 대괄호 안의 숫자만 다릅니다. |
![]() |
(참고로 i = i +1; 의 의미는, 수학에서 =는 2+3 = 5 처럼 결과를 표시하는 용도로 쓰인다면
c언어에서 =는 대입의 의미로 쓰입니다. 우측의 계산결과가 좌측으로 대입됩니다.
즉, i가 0이였다면 0 + 1 의 결과인 1이 i에 대입됩니다. )
선언할 변수가 많아질수록, 배열은 숫자만 바꾸면 됩니다. 정말 편리합니다.
![]() |
![]() |
정리해볼까요?
같은 자료형의 변수들을 한곳에 모아놓은것을 '배열' 이라고 합니다.
특이한 점은, int a[5]; 라고 만들면 0부터 4까지의 칸이 만들어 진다는 점이죠.
배열을 활용해서 인벤토리를 만들어보겠습니다.
![]() |
![]() |
변수 각각 쓰는것보다 훨씬 편리해졌죠?
이번엔 좀 특별한 인벤토리를 만들어보겠습니다.
인벤토리는 실제 5칸이 있는데, 화면에 표시되는건 위처럼 3칸입니다.
<과 >를 누르면 이전칸, 다음칸 아이템들이 표시되게 됩니다.
![]() |
![]() |
#include <stdio.h>
//1은 검, 2는 방패, 3은 HP, 4는 MP포션
int main()
{
int a[5];
a[0] = 1;
a[1] = 2;
a[2] = 1;
a[3] = 3;
a[4] = 4;
int showPos=0; //보여질 위치 (기준점)
int n; //입력
while(1){
printf("\n=====인벤토리=====\n");
int i = showPos;
while(i < showPos+3){
if(a[i] == 1) { printf("검 "); }
else if(a[i] == 2) { printf("방패 "); }
else if(a[i] == 3) { printf("HP "); }
else if(a[i] == 4) { printf("MP "); }
i = i+1;
}
printf("\n==================\n");
printf("\n");
printf("1. 이전\n");
printf("2. 다음\n");
printf("입력 : ");
scanf("%d",&n);
if(n==1) {
if(showPos>0) {
showPos = showPos - 1;
}
}
else if(n==2) {
if(showPos < 4) {
showPos = showPos + 1;
}
}
}
return 0;
}
오늘은 변수들을 한 곳에 모으는 방법에 대해 알아보았습니다.
같은 자료형의 변수들을 한곳에 모음으로써 반복문을 적용할 수 있어졌죠?
그럼 오늘도 열공 파이팅입니다!
게임개발을 희망하는 초등학생, 중학생, 고등학생들을 위한 c언어 책
이 글을 보고있다는건 게임개발에 관심있다는 거겠죠? 그렇다면 정말 잘보셨습니다. 읽기 쉽고, 단기간 내에 자기꺼화 할 수 있게 최대한 핵심만 담았습니다. 게임을 어떻게 만드는지 궁금해
blog.codingteacher.kr
1장. 프로그램 결국 0과 1
프로그램이란 단어를 들어보셨나요? 앞으로 우리가 만들게될 게임들!! 결국 '프로그램' 입니다. 프로그램이란 컴퓨터가 실행하는 파일을 뜻합니다. 스마트폰을 사용하고 계신다면, 자주 접하는
blog.codingteacher.kr
2장. 출력. 전사키우기 게임에 오신걸 환영합니다.
C언어에서 출력이란 화면에 나타나는 모든걸 뜻합니다. 예를들어 지뢰찾기 게임을 켰을때 화면에 나타나는 지뢰들의 이미지. 이 모든걸 다 '출력'이라 합니다. 위 사진에서 보이는 모든 내용�
blog.codingteacher.kr
3장. 변수. HP가 50인 전사가 생성되었습니다.
잠시 머릿속에 자판기를 떠올려볼까요? 자판기를 보면 동전투입구와 지폐투입구가 있고, 얼마의 돈을 넣었는지가 조그만 창에 표시됩니다. 자판기에 오백원을 넣으면 화면에 500이라 표시되고
blog.codingteacher.kr
4장. 게임을 만들기 위한 5가지 필수 문법
프로그램은 0과 1로 이루어져있다 했습니다. 하지만 0과 1로 프로그램을 만들기엔 시간도 오래걸리고 어렵기에, C언어로 프로그램을 만들면, 컴파일러가 0과1로 바꿔준다고 말씀드렸습니다. 그�
blog.codingteacher.kr
5장. 입력. 소지금을 입력해주세요.
이번 시간엔 정말 매력적인 '입력' 을 배워보겠습니다. 입력이 무엇을 의미하는지 이해 하기 위해 두 코드를 쳐보고 실행결과를 비교해봅시다. #include int main() { int money; money = 500; printf("소지금.
blog.codingteacher.kr
6장. 조건. 어떤 물건을 구매하시겠습니까? 1)청동검 2)철검
잠시 머릿속에 게임 상점을 떠올려볼까요? 어떤 물건을 선택하냐에 따라 사용하는 돈과 구매하는 물건이 달라집니다. 스킬을 사용할때도 생각해볼까요? 누른 키가 무엇인지에 따라 다양�
blog.codingteacher.kr
7장. 반복. 몬스터와 싸워보자.
몬스터와 싸우는 기능을 만든다고 생각해볼까요? 아래 사진을 봅시다. 좌측처럼 한번만 공격하고 전투가 종료되는게 맞을까요, 우측처럼 고블린이 죽거나, 플레이어가 도망쳐서 전투씬이 종��
blog.codingteacher.kr
초등, 중등, 고등 1:1 원격 c언어 교육문의
010 - 4537 - 7998
현재 대치동 학원에서 코딩강사로 활동중에 있습니다
영재고, 과학고 내신 /
초등, 중등, 고등 입문반, 초급, 중급, 정올반 /
앱, 게임 제작반 문의주세요!
'박기완 코딩교육 > 게임개발을 희망하는 초중고 학생들을 위한 c언어' 카테고리의 다른 글
9장. 반복(2) . 10번 안에 정답을 맞추지 못하면 게임에서 패배합니다. (1) | 2020.10.15 |
---|---|
7장. 반복. 몬스터와 싸워보자. (0) | 2020.10.06 |
6장. 조건. 어떤 물건을 구매하시겠습니까? 1)청동검 2)철검 (0) | 2020.10.06 |
5장. 입력. 소지금을 입력해주세요. (0) | 2020.10.01 |
4장. 게임을 만들기 위한 5가지 필수 문법 (0) | 2020.10.01 |