c ++中网格上的对象

时间:2018-04-01 12:56:32

标签: c++ loops

我正在尝试让对象在棋盘上移动(坐标网格)。我把这些物体定义为车辆。它们在平面上具有位置(x,y)和方向。被迫只能移动东南西方可能的方向可能是

  1. 北:(0,1)
  2. 南:(0,-1)
  3. 东:(1,0)
  4. West:(-1,0)
  5. 车辆只能一步一步地进行(x + 1,y),(x,y + 1),其中x,y是整数。 两辆车不能站在同一位置。车辆在可能的情况下保持其方向,即在遇到占用位置时。

    所以我必须创建一个虚空移动函数,其中包含附近车辆(东南西北)的位置。这样的功能应该:

    1. 检查车辆是否能保持其方向,如果可以的话,用新位置刷新车辆位置;
    2. 如果单元格被占用,请转向另一个方向,检查该方向上的单元格是否空闲...
    3. 如果车辆周围的每个单元都被占用,请保持不动。
    4. 我编写了一个完成第1点的代码但是我在第2点遇到了困难。特别是,我无法考虑改变车辆方向的有效方法。到目前为止,这是我的代码:

      class Vehicle {
      private:
          int x, y;
          int vx, vy;
      public:
      int getx() { return x;}
      int gety() { return y;}
      int getvx() { return vx;}
      int getvy() { return vy;}
      
      void sety(int a) { y = a;}
      void setx(int a) { x = a;}
      void setvx(int a) { 
          if (a != 0) {   
              vx = a / abs(a);
          }else { vx = a;}
      } 
      void setvy(int a) { 
          if (a != 0) {   
              vy = a / abs(a);
          }else { vy = a;}
      }
      
      void move(Vehicle * v) {
          int big = 0;
          while(big<4) {
              int cont=0;
              for(int i=0; i<4; i++) {
                  if (x+vx != v[i].getx() or y+vy != v[i].gety()) {
                      cont ++;
                  }
              }
              if(cont==4) {
                  x = x + vx;
                  y = y + vy;
                  break;
              } else { 
                  big ++;
                  // CHANGE DIRECTION in PROPER WAY
              }
          }
      }
      
      void print() {
          // prints the private members 
      }
      
      };
      

      我怎样才能改善这段时间?

0 个答案:

没有答案