MoveCheck moves the player if it is able to be moved. Then you unconditionally call Move right after MoveCheck to move it anyway. Move should not be called directly or MoveCheck should not call Move.
I'm leaning towards the second since your comments say:
1 2 3 4
* Function Name: MoveCheck()
* Parameters: i
* Return Value: int
* Purpose: check if user's move is out of boundary
But, your function doesn't have a return value at all and it does more than check to see if a user's move would put the user outside of a boundary.