2014-01-29 26 views
0

很多修修補補之後,我覺得我明確了我的問題的根源就我的球員不能在球場上適當運動:我的舉動算法不能正常工作

for (t = 1; t <= ROUNDS; t++){ 
     if (t % 10 == 0) { 
     print_game (field); 
    } 
    if (teamsize > 1){ 

     for (m = 0; m < SIZE_TEAM; m++){ 
     if (team [m].presence == 1){ 
      if (team [m].direction == East){ 
      if (team [m].y == 24){ 
       if (field [team [m].x][team [m].y - 1] != 0){ 
       rem (field [team [m].x][team [m].y - 1], teamsize); 
       field [team [m].x][team [m].y - 1] = team [m].id; 
       teamsize--; 
       } 
       else { 
       field [team [m].x][team [m].y - 1] = team [m].id; 
       } 
       } 

       if (field [team [m].x][team [m].y + 1] != 0) { 
       rem (field [team [m].x][team [m].y + 1], teamsize); 
       field [team [m].x][team [m].y + 1] = team [m].id; 
       teamsize--; 
       } 
       else { 
        field [team [m].x][team [m].y + 1] = team [m].id; 
       } 
       field [team [m].x][team [m].y] = 0; 
       } 
      else if (team [i].direction == West){ 
      if (team [m].y == 0){ 
       if (field [team [m].x][team [m].y + 1] != 0){ 
       rem (field [team [m].x][team [m].y + 1], teamsize); 
       field [team [m].x][team [m].y + 1] = team [m].id; 
       teamsize--; 
       } 
       else { 
       field [team [m].x][team [m].y + 1] = team [m].id; 
       } 
       } 
       if (field [team [m].x][team [m].y - 1] != 0) { 
       rem (field [team [m].x][team [m].y - 1], teamsize); 
       field [team [m].x][team [m].y - 1] = team [m].id; 
       teamsize--; 
       } 
       else { 
        field [team [m].x][team [m].y - 1] = team [m].id; 
       } 
field [team [m].x][team [m].y] = 0; 
       } 
       else if (team [i].direction == North){ 
       if (team [m].x == 0){ 
        if (field [team [m].x + 1][team [m].y] != 0){ 
        rem (field [team [m].x + 1][team [m].y], teamsize); 
        field [team [m].x + 1][team [m].y] = team [m].id; 
        teamsize--; 
        } 
        else { 
        field [team [m].x + 1][team [m].y] = team [m].id; 
       } 
       if (field [team [m].x - 1][team [m].y] != 0){ 
       rem (field [team [m].x - 1][team [m].y], teamsize); 
       field [team [m].x - 1][team [m].y] = team [m].id; 
       teamsize--; 
       } 
       else { 
        field [team [m].x - 1][team [m].y] = team [m].id; 
       } 
       field [team [m].x][team [m].y] = 0; 
      } 
      else if (team [i].direction == South){ 
      if (team [m].x == 24){ 
       if (field [team [m].x - 1][team [m].y] != 0){ 
       rem (field [team [m].x - 1][team [m].y], teamsize); 
       field [team [m].x - 1][team [m].y] = team [m].id; 
       teamsize--; 
       } 
       else { 
       field [team [m].x - 1][team [m].y] = team [m].id; 
       } 
       if (field [team [m].x + 1][team [m].y] != 0){ 
       rem (field [team [m].x + 1][team [m].y], teamsize); 
       field [team [m].x + 1][team [m].y] = team [m].id; 
       teamsize--; 
       } 
       else { 
        field [team [m].x + 1][team [m].y] = team [m].id; 
       } 
        field [team [m].x][team [m].y] = 0; 
       } 
      } 
     } 
     } 
    } 
    } 
    } 

    print_game (field); 
    return 0; 
} 

我怎麼知道呢?那麼,我測試了部分代碼,結果很好。只有當我包含這個巨大的循環時,事情纔會變得複雜。 無論如何,讓我知道如果你看到任何怪癖。

而且,這裏是我的REM功能:

int rem (int id, int teamsize){ 
    int k; 
    for (k = 0; k < teamsize; k++){ 
     if (team [k].id == id){ 
     team [k].presence = 0; 
     } 
    } 
} 

我的枚舉:

enum move_direction {East = 1, West = 2, North = 3, South = 4}; 
+0

這裏你的實際問題是什麼? – mathematician1975

+2

這段代碼被大聲喊出來重構成幾個簡單的函數。 – paddy

+0

我的問題是,在我剛剛發佈的代碼中,存在一個讓球員(陣列)上的球員(即數字)無法將點移動到現場的怪癖,我想知道它來自哪裏。就像我說的那樣,這是我以前提出的問題的後續行動,並且重寫整個程序(這是它的一大塊)已經引起了一些同行用戶的憤怒。 – Michformer

回答

0

通過看你如何申報的for循環外的變量k時,你可以做的如下: for(int k=0;k < teamsize; ++k) 我猜你是像我這樣的C語言的中間用戶。

既然你還沒有把你之前發佈的問題關聯到這裏,我只能在這裏僅僅通過這篇文章。

我的理解是,你有兩個數組返回結構數據,teamfield有問題。

這兩個結構可能不兼容,甚至更糟的是非標量數據嗎?

當您將團隊數組編碼到二維字段數組中時,線性團隊數組本質上是一個表達式,其結果必須通過評估得到。雖然您有單個結構數據成員具有int返回類型,但團隊數組必須具有團隊的結構返回類型才能使這些實例成爲團隊數組的元素。你可能已經知道,C的數組本質上是一個指針,指向數組中的第一個元素。 C語言的這種實現表明這兩個數組位於兩個不同的內存地址空間中。因此,爲了檢索字段數組中的數據,編譯器必須遍歷隊列數組以檢索必要的int數據。

僅通過思考過程,就可以合理地假設int值應該返回到數組的位置括號,以便可以訪問正確的字段數組元素。但並非所有事情都是合乎邏輯的

由於非標量數據點非常複雜,代碼很可能無法編譯。