2012-03-27 2 views
0

현재 파일에서 여러 NPC를로드하여 내 게임에로드하는 방법을 연구 중입니다. 나는 배열과 올바르게 작동하지만 배열을 사용할 수있는 공간보다 더 많은 NPC가 필요한 경우 크기를 변경할 수 있기 때문에 벡터를 사용하도록 변경하고 싶습니다. 그래서 대부분 빈 배열을 가지고 있지 않습니다. 나는 현재 많은 NPC가 필요 없다. 다음 코드는 실제 프로그래밍이 아닌 테스트 프로그램의 코드입니다. 나는 실수로 전체 프로젝트를 망쳐 놓지 않았다. 배열 대신 벡터에서 클래스 함수 호출

int main() 
{ 
char input; 
bool Running = true; 
NPC Creatures[MAX_NPCS]; 

//InitCreatures loads the X, Y and Type from the file. I know with vectors I have to 
//resize it as I go along, Which would be included in the function. 
if(Creatures[MAX_NPCS].InitCreatures(Creatures) == false) 
{ 
    Creatures[MAX_NPCS].CleanUp(Creatures); 
    return 0; 
} 

while(Running == true) 
{ 
    cout << "(C)heck an NPC, (A)ttack and NPC or (E)xit the program\n"; 
    cin >> input; 
    switch(input) 
    { 
     case 'C': Creatures[MAX_NPCS].Check(Creatures); break; 
     case 'c': Creatures[MAX_NPCS].Check(Creatures); break; 
     //The Check function just shows the X, Y and Type of the NPC 
     case 'A': Creatures[MAX_NPCS].Attack(Creatures); break; 
     case 'a': Creatures[MAX_NPCS].Attack(Creatures); break; 
     //Attack shows X, Y and type and then removes that NPC from the array. 
     case 'E': Running = false; break; 
     case 'e': Running = false; break; 
     default: cout << "That was not a valid input\n"; break; 
    } 
} 

Creatures[MAX_NPCS].CleanUp(Creatures); 
cout << "Exiting\n"; 
system("PAUSE"); 
return 0; 
} 

정말 나는 데 유일한 문제는 내가 지금 가지고있는 것처럼 배열을 사용하는 대신 벡터에서 NPC 클래스의 기능을 실행하기 위해 홈페이지를 받고있다. 벡터를 수락하고 올바르게 처리하도록 호출하는 함수에서 다른 것을 쉽게 변경할 수 있습니다.

나는 이런 식으로 뭔가를했을 때 내가 그들을 호출 할 뿐이었다 기능을 실행하는 벡터를 사용하려고 할 때

:

Creatures[1].Attack(Creatures); 

물론 내가처럼 그들을 호출 할 때 값이 제대로 반환하지 않음 그리고 나는 보통 에러를 얻는다. 게다가 NPC가 현재 맵에 대해 얼마나 많은 NPC가로드 될지 모른다.

이 문제에 도움을 주시면 감사하겠습니다. 프로그래밍에 관해서는 특히 초보자라는 것을 알고 있습니다. 특히 벡터에 관해서는 특히 그렇습니다. 함수 코드가 필요한 경우 기꺼이 게시 할 것입니다.

+1

Erm,'Creatures [MAX_NPCS]'와 같은 액세스는 정의되지 않은 동작입니다. 사용할 수있는 인덱스는 MAX_NPCS-1까지입니다. – Xeo

+0

오 이런, 잘 했어. 왜 내가 벡터를 원하는지의 종류. 그러나 나는 그들이 정확하게 이해하지 못하는 것 같아요. 어쨌든 함수는 너무 많은 NPC를 추가하지 못하게하고 적절하게 수행합니다. P – Mattycaeks

+0

'std :: vector'는 좋은 패키지 동적 배열입니다. 그것들에'.push_back '물건을 넣고, 그것들을 정상적인 배열 접근 (operator [])으로 얻는다. 프로그래밍 책에서 그것에 대해 뭐라고 말합니까? – Xeo

답변

0

당신은 벡터를 생성하고 (당신이 나중에 최초의 생물을 덮어 쓸 수 있습니다)에 InitCreatures 함수를 호출 할 수 있도록이의 첫 번째 요소를 가질 수있다.

vector<NPC> Creatures(1); 
Creatures[0].InitCreatures(Creatures); 

클래스에서 참조로 전달 된 매개 변수가 있다고 가정합니다.

bool InitCreatures(vector<NPC>& x) { ... } 

하지만 당신은 당신이 가진 모든 함수에 매개 변수로 생물을 제공하기 때문에 (수표 또는 공격을해야합니까?) -는 NPC 벡터를 보유하는 클래스가 더 나은되지 않을 것?

+0

벡터에 더 추가해야 할 시점까지는 작동합니다. 모든 NPC가 해당 함수 내에로드되기 때문에 어떻게 벡터의 크기를 조정해야합니까? 기능을 잘 사용하려고하면 컴퓨터에서 마음에 들지 않습니다. – Mattycaeks

+0

아, 걱정마. 그것은 다른 것으로 보인다. 이상한 이유로 지금은 잘 작동합니다. 내가 생각한 배열에서 변환 할 때 몇 가지 사항을 변경하는 것을 잊어 버렸다. 도와 줘서 고마워! – Mattycaeks

관련 문제