c语言 - 我的移动算法无法正常工作



经过大量修补后,我认为我钉在了我的问题的来源,因为我的玩家无法在现场上正确移动:

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

通过查看您如何在以下操作的情况下查看循环外的变量k: for(int k=0;k < teamsize; ++k)我猜你是像我这样的C语言的中间用户。

,由于您没有在此处链接您先前发布的问题,所以我仅在此处就严格通过此帖子。

我的理解是,您在返回struct数据的两个阵列中遇到麻烦, teamfield

两个结构可能不兼容,甚至可能是更糟的非量表数据?

当您将团队数组编码为二维字段数组时,线性团队阵列本质上是一个表达式,必须通过评估获得结果。尽管您具有带有int返回类型的单个结构数据成员,但团队数组必须具有团队的结构返回类型,以使这些实例成为团队数组的元素。

您可能已经知道,C的数组本质上是指向数组中第一个元素的指针。C语言的实现表明,两个数组位于两个不同的内存地址空间中。因此,为了检索字段数组中的数据,编译器必须遍历团队数组才能检索必要的INT数据。

仅通过思考过程,合乎逻辑地假设应该返回int值返回数组位置括号,以便可以访问正确的字段数组元素。但是并非一切都在逻辑上起作用。

由于这些非量表数据点的复杂性,代码很可能不会编译。

最新更新