프로그래밍/주저리 주저리

간단한 인벤토리 시스템 제작법

레노미안 2013. 7. 27. 17:47

요즘 군대에서 시행하고 있는 목표지향적 자기계발시간에 뭘 할까 하다가 복습할겸 프로그래밍을 연습하면서 간단한 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번까지 출력한다는 것이다. 이것은 컨틴뉴문으로 제어할수있을거라 생각한다.


초보자의 실력이라 많이 미흡하지만 이렇게 도전하면 언젠가는 좋은 실력을 갖게 될거라 생각하면 오늘도 열심히 노력해야할듯싶다.