간단한 인벤토리 시스템 제작법
요즘 군대에서 시행하고 있는 목표지향적 자기계발시간에 뭘 할까 하다가 복습할겸 프로그래밍을 연습하면서 간단한 Text RPG를 제작중이다.
RPG에서 가장 중요한 인벤토리 시스템을 어떻게 제작해야 할까 2일 정도 고민하다가 만든 짝퉁인벤시스템이 이것이다. 이걸베이스로 으샤으샤하면 좀 더 나은게 나오겠지?
struct inventory { char *name;//이름 int damege;//공격력 int armor;//방어력 int itemclass;//0은 아이템X 1은 하급 2은 중급 3는 고급 int price;//가격 int weight;//무게 }SIZE[100]; struct wepons { char *name; int damege; int armor; int itemclass; int price; int weight; }WNO[100];
이것처럼 인벤토리와 아이템의 구조체가 같거나 유사하여야한다.
구매관련은 이것이다.
for(i=0;i<100;i++) { if(WNO[i].itemclass!=1) continue;//클레스가 1인 하급일경우만 출력 j=count+97; count++; printf("%c)%s\t%d\t%d\t%d\t%d\n",j,WNO[i].name,WNO[i].damege,WNO[i].armor,WNO[i].price,WNO[i].weight); }
아이템의 목록을 쫘르륵 보여줘서 플레이어가 아이템을 살펴보고 고를수있도록 도와준다.
이건 구매시스템인데
int i; for(i=0;i<100;i++) { if(SIZE[i].itemclass) continue; SIZE[i].name=WNO[0].name; SIZE[i].damege=WNO[0].damege; SIZE[i].armor=WNO[0].armor; SIZE[i].price=WNO[0].price; weight-=WNO[0].weight; break; } is++;//인벤토리 저장된 량
여기서 WNO쪽은 0으로 고정되어있는데 이게 이 시스템의 가장 큰 문제이다.
같은 상점이 아닌이상 같은 물건이 없을 확률이 높기때문에 입력한 코드와 아이템의 코드값이 다를 수있어서 아이템마다 각각의 구매시스템이 필요하다. 다음개선사항이 이것이 되야할듯 싶다.
그리고 저 반복문안에 제일 위코드인 컨틴뉴문은 빙 돌리면서 인벤토리내에 빈 슬롯에 바로 넣어주기 위해 존재한다. 만약 인벤내에 1,2,4,5,6이 차있다면 3번이 비어있지 않은가? 그럼 3번이 비었음을 인지하고 넣어주기 위해 존재하는 문이다.
다음으로는 인벤토리 보기인데
void inventory(void) { printf("인벤토리를 열었습니다.\n"); int i; printf(" 이름 \t공격력\t방어력\t가격\t무게\n"); for(i=0;i<is;i++) { printf("%d)%s\t%d\t%d\t%d\t%d\n",i,SIZE[i].name,SIZE[i].damege,SIZE[i].armor,SIZE[i].price,SIZE[i].weight); } }
이것을 보면 위에 구매목록과 유사한것을 알수있다. 이것에서는 문제점은 1,2,4,5에 아이템이 있다면 빈 3번을 출력하지 않는것이 좋은데. 3번까지 출력한다는 것이다. 이것은 컨틴뉴문으로 제어할수있을거라 생각한다.
초보자의 실력이라 많이 미흡하지만 이렇게 도전하면 언젠가는 좋은 실력을 갖게 될거라 생각하면 오늘도 열심히 노력해야할듯싶다.