簡體   English   中英

我的移動算法無法正常工作

[英]My move algorithm isn't working properly

經過大量的修改后,我認為我確定了我的問題,即我的球員在場地上的動作不正確:

 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};

通過查看在以下情況下如何在for循環之外聲明變量k: for(int k=0;k < teamsize; ++k)我猜您是C的中間用戶像我這樣的語言。

由於您尚未在此處鏈接您先前發布的問題,因此我僅在此處嚴格按照此帖子進行操作。

我的理解是,您在返回結構數據的兩個數組( teamfield上遇到了麻煩。

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

當將team數組編碼為二維字段數組時,線性team數組本質上是一個表達式,其結果必須通過求值來獲得。 盡管您具有具有返回類型為int的各個結構數據成員,但team數組將必須具有team的struct返回類型,以使這些實例成為team數組的元素。

您可能已經知道,C的數組本質上是一個指向數組中第一個元素的指針。 C語言的這種實現建議兩個數組位於兩個不同的內存地址空間中。 因此,為了檢索字段數組中的數據,編譯器將不得不遍歷team數組以檢索必需的int數據。

僅通過思考過程,就可以合理地假設應該將int值返回到數組位置括號,以便可以訪問正確的字段數組元素。 但是,並非一切都在邏輯上起作用。

由於這些非標量數​​據點非常復雜,因此很可能無法編譯代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM