2013-04-05 131 views
0

所以,首先,這是我的聲明和初始化:C++動態數組「丟失」的數據

int** GameField = 0; 
GameField = new int*[mapsize];     
for(int i = 0; i < mapsize; i++) 
     GameField[i] = new int[mapsize]; 

for(int j = 0; j < mapsize; j++)     
     for(int i = 0; i < mapsize; i++) 
      GameField[i][j] = 0; 

現在,我試圖用一個簡單的命令插入數據:

if(!(Player1.find(Move) == Player1.end()) && iter>0)    
     { 
      GameResult=1;          
     }else 
     { 
      Player1[Move] = 1;       
      GameField[Move.first][Move.second]=1;    
      if(WinCheck(Player1, Move, x, mapsize)) 
       GameResult = 1; 
     } 

Simoultaneously我插入數據轉換成STL地圖。 Visual Studio沒有用於動態數據的原生顯示,所以我無法查看錶格的內容。試圖觀看記憶,但很難理解它。有,這似乎是工作到一定點計劃的一部分:

bool CheckIfMovePossible(int **GameField, pair <int,int> &Move, int MapSize) 
{ 
    int x = Move.first; 
    int y = Move.second; 
    bool Neighbour = false; 

    if(GameField[modulo(x+1,MapSize)][y]==(1||2))      // po prawej 
     Neighbour = true; 

    if(GameField[modulo(x+1,MapSize)][modulo(y+1,MapSize)]==(1||2)) 
     Neighbour = true; 

    if(GameField[modulo(x+1,MapSize)][modulo(y-1,MapSize)]==(1||2)) 
     Neighbour = true; 

    if(GameField[x][modulo(y+1,MapSize)]==(1||2))      // x 
     Neighbour = true; 

    if(GameField[x][modulo(y-1,MapSize)]==(1||2)) 
     Neighbour = true; 

    if(GameField[modulo(x-1,MapSize)][modulo(y+1,MapSize)]==(1||2))  // po lewej 
     Neighbour = true; 

    if(GameField[modulo(x-1,MapSize)][y]==(1||2)) 
     Neighbour = true; 

    if(GameField[modulo(x-1,MapSize)][modulo(y-1,MapSize)]==(1||2)) 
     Neighbour = true; 

    return Neighbour; 

} 

它應該檢查是否有在容器中的任何相鄰的數據。我計算手動值並使用調試器,在每種情況下,程序的行爲就好像在請求的位置沒有數據,而它必須存在於地圖中。任何信息將不勝感激。

+3

'1 || 2'沒有做你認爲正在做的事。你也可以用一維數組更好。像這樣索引:'myArray [(y)* width +(x)]' – Dave 2013-04-05 14:45:45

+1

@ user1928689'1 || 2'等價於'true'。 – Synxis 2013-04-05 14:50:33

回答

2

看來,你想用代碼來執行這樣的

if(GameField[modulo(x+1,MapSize)][y]==(1||2)) 

是這樣的。

if (GameField[modulo(x+1,MapSize)][y] == 1 || 
    GameField[modulo(x+1,MapSize)][y] == 2) 

無關你的問題,好像你的邏輯確實了很多工作後已確定該函數將返回true

一旦確定它是返回值,請考慮使用else if或代碼return true

+0

非常感謝,幫助:)如果結構在搜索錯誤時仍然改變它 – Ghostli 2013-04-05 18:37:45

2

你的if語句應該是這樣的:

if(GameField[modulo(x+1,MapSize)][y] == 1 || 
    GameField[modulo(x+1,MapSize)][y] == 2)      // po prawej 
    Neighbour = true; 

您也可能想保存您的模數值,以免不得不經常重新計算它們。

+0

我隱約記得能夠在VB6中以這種方式構造if語句,但'or'在C++中是一個完全不同的野獸。 – metalhead 2013-04-05 16:00:16