public Position.Public getRelativePosition(Position.Player playerPos) {
   Public answer = this;
   if (!answer.equals(MID)) {
     switch (playerPos) {
       case TOP:
         {
           answer =
               Public.values()[
                   ((this.ordinal() + TOPDEVIATION) % ELEMENTSINCYCLE)
                       + (ELEMENTSINCYCLE * (int) (this.ordinal() / ROWS))];
           break;
         }
       case RIGHT:
         {
           answer =
               Public.values()[
                   ((this.ordinal() + RIGHTDEVIATION) % ELEMENTSINCYCLE)
                       + (ELEMENTSINCYCLE * (int) (this.ordinal() / ROWS))];
           break;
         }
       case LEFT:
         {
           answer =
               Public.values()[
                   ((this.ordinal() + LEFTDEVIATION) % ELEMENTSINCYCLE)
                       + (ELEMENTSINCYCLE * (int) (this.ordinal() / ROWS))];
           break;
         }
       default:
         {
         }
     }
   }
   return answer;
 }
    public Position reArrangeRelativePosition(Player oldPlayerPos, Player newPlayerPos) {
      Public answer = this;
      if (!this.equals(Position.Public.MID)) {
        int diff = oldPlayerPos.ordinal() - newPlayerPos.ordinal();
        if (diff < 0) {
          diff = 4 + diff;
        }
        answer =
            Public.values()[
                ((this.ordinal() + diff) % ELEMENTSINCYCLE)
                    + (ELEMENTSINCYCLE * (int) (this.ordinal() / ROWS))];
      }

      return answer;
    }