예제 #1
0
void Move::movingDelay(long duration) {
  long startTime = millis();
  long elapsedTime = 0;
  
  while (elapsedTime < duration) {
    // function in Look module checks for obstacle in direction of movement 
    if (isPathClear()) { 
      if (state != MOV_ROTATE) {
	// rotate is only valid movement
#ifdef MOVE_DEBUG
	Serial.println(P("Stopping in moving Delay()")); 
#endif
	brake(); 
      }
    }  
    elapsedTime = millis() - startTime;
  }  
}
예제 #2
0
int isMoveValid() {
    if (dx == 0 && dy == 0) {
        cout<<endl<<"Null move not permitted.";
        return 0;
    } else if (mIsMoveDiagonal == 0 && mIsMoveStraight == 0 && ci != 'N') {
        cout<<endl<<"Invalid move.";
        return 0;
    } else if (isPathClear() == 0 && ci != 'N') {
        cout<<endl<<"Can't jump over another piece.";
        return 0;
    } else if (cf != ' ' && cf < 96) {
        cout<<endl<<"Can't capture your own piece.";
        return 0;
    }

    switch (ci) {
        case 'P':
                    if ((turn == 1 ? yf - yi: yi - yf) > 0) {
                        if (dx == 0 && cf == ' ') {
                            if (dy == 1) {
                                return 1;
                            } else if (dy == 2 && turn == 1 ? yi == 1 : yi == 6) {
                                return 1;
                            }
                        } else if (dx == 1 && dy == 1 && cf > 96) {
                            return 1;
                        }
                    }

                    break;

        case 'N':
                    if (dx == 1 && dy == 2 || dx == 2 && dy == 1) {
                        return 1;
                    }

                    break;

        case 'B':
                    if (mIsMoveDiagonal == 1) {
                        return 1;
                    }

                    break;

        case 'R':
                    if (mIsMoveStraight == 1) {
                        return 1;
                    }

                    break;

        case 'Q':
                    if (mIsMoveDiagonal == 1 || mIsMoveStraight == 1) {
                        return 1;
                    }

                    break;

        case 'K':
                    if (dx <= 1 && dy <= 1) {
                        return 1;
                    }

                    break;

    }

    cout<<endl<<"Invalid move!";
    return 0;
}