public boolean move(int place) {
        if(place < 0 &&  place > 8) {
            return false;
        }
        int row = place2row(place);
        int col = place2col(place);
        if(board.get(row, col) != Board.Type.NOT)
            return false;
        Board.Type type = Board.Type.O;
        if(step%2 == 0) {
            state = State.moveX;
        } else {
            type = Board.Type.X;
            state = State.moveO;
        }
        board.set(row, col, type);
        State winner = checkWinner();
        if(winner == State.moveO){
            step++;
        } else {
            state = winner;
        }
        return true;
    }