2014-10-06 6 views
-1

저는 조카를위한 작은 RPG 게임을 작업 중이며, 순전히 해골과 싸우는 대신 소수의 퀘스트를 믹스에 넣기로했습니다. 항목을 추가, 제거 및 사용할 수 있다는 사실에 따라 작업 재고를 구축했지만 인벤토리의 항목은 스태킹없이 한도 (25 개 항목)에 도달 할 때까지 채울 것입니다. for 루프를 사용하여 목록 항목 제어 C#

나는 다음 코드를 사용하여이 문제를 해결할 : 항목이 우리가 (항목)를 추가 우리가 슬롯에있는 것과 동일하고 있다면 당신이 볼 수있는

finished = false;  
if(Backpack[bSlot].ITEM.ItemName == Item.ItemName){ 
         if(!finished){ 
          Backpack[bSlot].ITEM.ItemCount += 1; 
          finished = true; 
         } 
        } 

그냥 확인합니다.

그러나이 항목은 항목이 완전히 동일하고 다른 항목이 삭제되고 해당 게임 개체가 분산 된 경우에만 작동합니다.

내 현재의 문제가이 양을 증가하는 경우 나,이 항목이 동일한 경우 확인받을 수 없다는 것입니다
public void AddItem(ItemDefine Item){ 
    bool finished = false; 
    for (int bSlot = 0; bSlot < Backpack.Count; bSlot++) { 
     //if slot is empty, add item 
     if(Backpack[bSlot].ITEM.ItemName == null){ 
      if(!finished){ 
       Backpack[bSlot].ITEM = Item; 
       finished = true; 
      } 
     } 

     //If item is the same as the one in our current slot 
     if(Backpack[bSlot].ITEM.ItemName == Item.ItemName){ 
      if(!finished){ 
       Backpack[bSlot].ITEM.ItemCount += 1; 
       finished = true; 
      } 
     } 

     //if the item is NOT the same as the one in our current slot 
     if(Backpack[bSlot].ITEM.ItemName != Item.ItemName){ 
      if(!finished){ 
       Backpack[bSlot].ITEM = Item; 
       finished = true; 
      } 
     } 
    } 
} 

(ITEMCOUNT : 여기

는 배낭에 항목을 추가하는 내 기능입니다)를 1 씩 증가시키고 다음 목록 위치로 반복하여 항목을 추가합니다.

아이디어가 있으십니까?

답변

0

코드에 몇 가지 문제가 있습니다. 논리에 실제로 if else을 사용해야합니다.

그러나 hash table을 사용하면 훨씬 쉬운 방법이 있습니다. 해시 테이블을 사용하면 이미 가지고있는 항목의 중복을 피하기 쉽고 스택 가능한 항목을 스택에 넣을 수 있습니다.

당신은이 같은 Dictionary을 만들 수 있습니다

Dictionary<key, value>(); 

key이 당신의 품목이 될 것입니다,이 값은 스택해야합니다.

+0

이것은 약간의 도움을주었습니다. 나는 돌아가서 내 생각을 다시 생각해 보았습니다. 다시 if-else를 사용해 보았지만 문제를 해결할 수 있었지만 항목에 카운터가있는 경우 (즉, ITEM.ItemCount) 기본값으로 1로 설정되었으므로 사전을 필요로하지 않았습니다 (달리 명시하지 않는 한). 암호. 답변 해 주셔서 감사합니다. – 10074405

0

for 루프가 있는지 여부를 결정하기 전에 완료합니다.

public void AddItem(ItemDefine Item){ 

    bool exists = false; 
    if(Backpack.Where(x => x.ItemName == Item.ItemName).ToArray().Length > 0) 
     exists = true; 

    switch(exists) { 
     case true: { 
        // Item Exists 
        ItemDefine newItem = Backpack.Where(x => x.Itemname == Item.ItemName).FirstOrDefault(); 
        // we double check to make sure it really exists. 
        If(newItem != null) { 
         newItem.ItemCount += 1; 
        } 
       } break; 
     case false: { 
        // Item Does Not Exist 
        Backpack.add(Item); 
        } break; 
     default: { 
        // Something went horribly wrong 
       } break; 
    } 

} 

이 예는 않는 경우 우리는 먼저,이 이름의 항목이 존재하는지 목록을 검색하거나하지, 우리는 우리가 나중에 무엇을 평가합니다. 존재한다면 우리는 글자 그대로 그냥 항목 수를 늘려서 목록에 추가합니다. 배열 또는 목록 배낭 인 경우 배낭을 어떻게 선언했는지 알 수 없습니다.

논리를 확장하는 데는 여러 가지 방법이 있지만 목록 처리 기능은 인벤토리 처리에 유용합니다. 희망 사항은 약간의 통찰력을 제공합니다.

+0

모든 정직하게 나를 위해 일하는 것처럼 보일 수는 없지만, 생각해 볼 일이 몇 가지 있습니다. 어느 누가 나를 도와 줬어. 감사합니다. – 10074405

0

좋은 밤잠을 자고 돌아오고 답을 읽으십시오. 내게 두 개의 코드 섹션을 추가하고, 이상적인 슬롯 (5x5 그리드, 25 슬롯)이있는 두 개의 for 루프에서 항목 추가에 항목 추가를 추가했습니다. 나에게 몇 가지 이상한 행동을 준 이전의 진술이 있다면 나는 이미 다른 것을 시도했다.

나는 아이콘이 null의 경우 내가 확인 대신 itemName에가 null 인 경우 체크, 간단한 문법 변화에 전체 상황을 해결할 따라서 수정과 같은 것입니다 :

public void AddItem(ItemDefine Item){ 
     bool finished = false; 
     for (int bSlot = 0; bSlot < Backpack.Count; bSlot++) { 
      //if slot is empty, add item 
      if(Backpack[bSlot].ITEM.ItemIcon == null){ 
       if(!finished){ 
        Backpack[bSlot].ITEM = Item; 
        finished = true; 
       } 
      }else if (Backpack[bSlot].ITEM.ItemName == Item.ItemName) { 
       if (!finished) { 
        Backpack[bSlot].ITEM.ItemCount += 1; 
        finished = true; 
       } 
      } 
     } 
    } 

이도까지 작동 무기가 1로 제한되고, 음식이 128로 제한되고, 자원 128 및 퀘스트 아이템 1

모든 도움을 주셔서 감사합니다. 사용하지 마십시오. 사람들이 실제로 도움을 얻는 것을 알면 좋습니다.)

관련 문제