본문 바로가기

박기완 코딩교육/게임개발을 희망하는 초중고 학생들을 위한 c언어

8장. 배열. 게임 내 인벤토리를 만들어보자.

 게임 인벤토리를 만든다고 생각해볼까요?

 

위 사진처럼 여러개의 칸이 있고,  아이템이 놓여있는 상황을 

어떻게 하면  구현할 수 있을까요?

 

변수를 인벤토리 갯수만큼 만드는 것입니다.

값을 저장하려면 변수가 필요하니까요!

 

 

인벤토리에 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;	
}




 

 

오늘은   변수들을 한 곳에 모으는 방법에 대해 알아보았습니다.

같은 자료형의 변수들을 한곳에 모음으로써  반복문을 적용할 수 있어졌죠?

 

그럼 오늘도  열공 파이팅입니다!

 

 

hackee.tistory.com/255

 

게임개발을 희망하는 초등학생, 중학생, 고등학생들을 위한 c언어 책

이 글을 보고있다는건 게임개발에 관심있다는 거겠죠? 그렇다면 정말 잘보셨습니다. 읽기 쉽고,  단기간 내에 자기꺼화 할 수 있게 최대한 핵심만 담았습니다. 게임을 어떻게 만드는지 궁금해

blog.codingteacher.kr

hackee.tistory.com/256

 

1장. 프로그램 결국 0과 1

프로그램이란 단어를 들어보셨나요? 앞으로 우리가 만들게될 게임들!! 결국 '프로그램' 입니다. 프로그램이란 컴퓨터가 실행하는 파일을 뜻합니다. 스마트폰을 사용하고 계신다면, 자주 접하는

blog.codingteacher.kr

hackee.tistory.com/257

 

2장. 출력. 전사키우기 게임에 오신걸 환영합니다.

 C언어에서 출력이란 화면에 나타나는 모든걸 뜻합니다. 예를들어 지뢰찾기 게임을 켰을때 화면에 나타나는 지뢰들의 이미지. 이 모든걸 다 '출력'이라 합니다.  위 사진에서 보이는 모든 내용�

blog.codingteacher.kr

hackee.tistory.com/258

 

3장. 변수. HP가 50인 전사가 생성되었습니다.

 잠시 머릿속에 자판기를 떠올려볼까요? 자판기를 보면 동전투입구와 지폐투입구가 있고, 얼마의 돈을 넣었는지가 조그만 창에 표시됩니다. 자판기에 오백원을 넣으면 화면에 500이라 표시되고

blog.codingteacher.kr

hackee.tistory.com/259

 

4장. 게임을 만들기 위한 5가지 필수 문법

 프로그램은 0과 1로 이루어져있다 했습니다. 하지만 0과 1로 프로그램을 만들기엔 시간도 오래걸리고 어렵기에, C언어로 프로그램을 만들면, 컴파일러가 0과1로 바꿔준다고 말씀드렸습니다. 그�

blog.codingteacher.kr

hackee.tistory.com/260

 

5장. 입력. 소지금을 입력해주세요.

이번 시간엔 정말 매력적인 '입력' 을 배워보겠습니다. 입력이 무엇을 의미하는지 이해 하기 위해 두 코드를 쳐보고  실행결과를 비교해봅시다. #include int main() { int money; money = 500; printf("소지금.

blog.codingteacher.kr

blog.codingteacher.kr/261

 

6장. 조건. 어떤 물건을 구매하시겠습니까? 1)청동검 2)철검

 잠시 머릿속에 게임 상점을 떠올려볼까요?   어떤 물건을 선택하냐에 따라  사용하는 돈과  구매하는 물건이 달라집니다. 스킬을 사용할때도 생각해볼까요? 누른 키가 무엇인지에 따라 다양�

blog.codingteacher.kr

hackee.tistory.com/262

 

7장. 반복. 몬스터와 싸워보자.

 몬스터와 싸우는 기능을 만든다고 생각해볼까요? 아래 사진을 봅시다. 좌측처럼 한번만 공격하고 전투가 종료되는게 맞을까요, 우측처럼 고블린이 죽거나, 플레이어가 도망쳐서 전투씬이 종��

blog.codingteacher.kr

 

 

초등, 중등, 고등  1:1 원격 c언어 교육문의

010 - 4537 - 7998

 

현재 대치동 학원에서 코딩강사로 활동중에 있습니다

영재고, 과학고 내신 /

초등, 중등, 고등 입문반, 초급, 중급, 정올반 /

앱, 게임 제작반  문의주세요!